DynamoDB

Jun 07, 2016 pm 04:10 PM
dynamodb 軽量 プロセス

本来想写写进程、线程、轻量级线程、goroutine还有协程(coroutine),为什么我把goroutine单独列出来是因为它不是协程,所有翻译成协程的都是偷用概念,把比线程轻量的都叫做协程。算了,先不纠结这个,今天想写写DynamoDB,记录下经历。 就如官网描述到的

本来想写写进程、线程、轻量级线程、goroutine还有协程(coroutine),为什么我把goroutine单独列出来是因为它不是协程,所有翻译成协程的都是偷用概念,把比线程轻量的都叫做协程。算了,先不纠结这个,今天想写写DynamoDB,记录下经历。

就如官网描述到的,无限扩展,好吧,具体实现也不得而知,但这个无限扩展的前提是诸多限制。在确认DynamoDB是否适口你的项目使用的时候,记得多分析它的限制,否则迟早会成为项目的瓶颈,或者减缓业务的开发。

首先,DynamoDB统计不友好,想统计它的东西?最好还是放弃这个念头,扫描一遍的代价大得不可思议。在用DynamoDB之前,先弄好你的日志系统。
其次,它不是缓存,虽然是说SSD搞的,但是连这个东西(HTTPS)的代价不是普通缓存所会做的,就它内部查询性能来看,也是几十上百毫秒级别的。
再次,不要以为这个东西很容易用,各种SDK各种坑,拿python boto为例子,两个版本的实现,各自残缺,有些功能SDK根本提供不了,你要做好写RESTful requests的准备。
最后,你要是会看英文且真的想用DynamoDB就别继续往下看了,直接看官网文档各种详尽和指引,以下只是个人心得和坑的摘录。

第一个坑是数据类型,嗯,不完全符合JSON,也就是说,这个要做点格式转换,前不久才出了List和Map的支持,叫文档类型,官方建议可以把JSON压缩成Binary,这...。一条项目(就是一条record,叫item)最大存储容量为400KB(只是英文文档这样写,中文文档还没更新,依然写着64K,这有点小,除此以外,中文文档残缺不全,不值一嗔),这个还可以。读/写流量限制预设(Provisioned Throughput)是一个最大的坑,以流量限定读写速率和容量。单个读单位可在1秒内读1次且4KB以内的内容,40KB就要10个读单位,同样地,单个写单位每秒可写入1次且1KB以内内容。
第二个坑来了,就是这个读/写流量限制预设,全局二级索引是和主表分开预设流量计算。最坑在于,倘若你想写入主表,主表的预设流量是够的而全局二级索引预设流量不够,这样就会插不进,报错,这样使得全局二级索引和新建一张表无异,新建一张表还更灵活。预设流量的另一个坑是,你的hashkey(整个数据库以hashkey作为主键,不知道的请到官网中文版补习)必须hash得均匀才能得到预设流量的最大效用。比如说,你预设了1000个读(预设读容量超过10000还需要递表申请),amazon帮你自动分在20个区存放,那么你每个区只会获得50个读的流量,假如你现在急着要读某一类别的数据,并且这一类别的不小心集中在某一区域,不好意思,你的消费将乘以个几倍几十倍(amazon的服务本身就贵)。如果你要强一致性读(默认是不强一致性读的,不懂的自己脑补),那么将会消耗两倍于脏读的读单位。
第三大坑是索引,上面说到的全局索引是一个坑,还有一种叫二级本地索引也是一个坑,它居然有一条单个hashkey索引内容不超过10G的规定,这个索引内容投影属性*(这个概念请看官网)。这就是说,当你索引加投影单个item有200个字节(200个字节真心不多吧,一个uuid随便都32byte了,当然,你可以选择压缩...),200字节的情况下,该hashkey最多可以包含的条目是5000万条,这个规定直接给人限死了,你不能拿单个hashkey来玩,更别做太多投影。此外,索引是不能添加修改删除的,只能跟随表创建时添加。虽然有10G这个限定,但我觉得它的RangeKey和本地二级索引还是比较独特的,可以解决很大一部分的需求。前提是,最深的索引就是二级,你要做三级四级的索引就要想一下办法了,这个想一下办法也可以再解决一大部分的需求吧。
第四,别考虑太多事务啊原子操作之类,它做不了,简单的自增还是可以的。
最后就是SDK,如果你只是简单的使用,python的SDK boto没什么大问题,但你考虑到并发冲突,部分属性修改兼上是否覆盖写入等等的问题的时候,boto压根就不能解决,这就需要又花费一大块精力去手工Restful了,当然,如果你想用上tonado,没有现成的异步模块可用。

如果你已经跳过上述的坑,相信离DynamoDB符合你的项目需求已经不远了,当然,性能方面我还没做过多测试,准备上线亿级以上条目的项目了,详情敬请期待。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Explorer.exe プロセスとは何かを説明する Explorer.exe プロセスとは何かを説明する Feb 18, 2024 pm 12:11 PM

Explorer.exe とは何のプロセスですか? Windows オペレーティング システムを使用しているときに、「explorer.exe」という用語をよく聞きますが、このプロセスが何であるか知りたいですか?この記事では、プロセスexplorer.exeとは何か、その機能と効果について詳しく説明します。まず、explorer.exe は Windows オペレーティング システムの重要なプロセスであり、Windows エクスプローラー (ウィンドウ) の管理と制御を担当します。

ccsvchst.exe はどのようなプロセスですか? ccsvchst.exe はどのようなプロセスですか? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe は、Symantec Endpoint Protection (SEP) ソフトウェアの一部である共通プロセス ファイルです。SEP は、有名なネットワーク セキュリティ会社 Symantec によって開発されたエンドポイント保護ソリューションです。ソフトウェアの一部として、ccsvchst.exe は SEP 関連のプロセスの管理と監視を担当します。まず、SymantecEndpointProtection(

ローエンドまたは古いコンピュータに最適な軽量 Linux ディストリビューション ローエンドまたは古いコンピュータに最適な軽量 Linux ディストリビューション Mar 06, 2024 am 09:49 AM

古いコンピュータやローエンドのコンピュータに新しい命を吹き込むのに最適な Linux ディストリビューションをお探しですか? 「はい」の場合は、正しい場所に来ています。この記事では、特に古いハードウェアや性能の低いハードウェア向けにカスタマイズされた軽量 Linux ディストリビューションのおすすめをいくつか紹介します。その背後にある動機が老朽化したデバイスを復活させることであっても、単に予算内でパフォーマンスを最大化することであっても、これらの軽量オプションは確実に要件に適合します。軽量の Linux ディストリビューションを選択する理由は何ですか?軽量の Linux ディストリビューションを選択することにはいくつかの利点があります。その 1 つは、最小限のシステム リソースで最高のパフォーマンスが得られることです。そのため、処理能力、RAM、ストレージ容量が限られている古いハードウェアに最適です。さらに、リソースを大量に消費するため、

Linux でゾンビプロセスを適切に強制終了する方法 Linux でゾンビプロセスを適切に強制終了する方法 Feb 19, 2024 am 10:40 AM

Linux システムでは、ゾンビ プロセスは終了したもののシステムにまだ残っている特別なプロセスです。ゾンビ プロセスは多くのリソースを消費しませんが、多すぎるとシステム リソースの枯渇を引き起こす可能性があります。この記事では、ゾンビ プロセスを正しく削除してシステムの正常な動作を保証する方法を紹介します。 1Linux ゾンビ プロセス 子プロセスがタスクを完了した後、親プロセスが時間内にステータスを確認しないと、子プロセスはゾンビ プロセスになります。子プロセスは親プロセスからの確認を待っており、システムは完了するまでリサイクルしません。そうしないと、ゾンビ プロセスがシステム内でハングし続けます。システム内にゾンビ プロセスがあるかどうかを確認するには、コマンド top を実行して、実行中のすべてのプロセスとゾンビ プロセスの可能性を表示します。 Linux における「top」コマンドの結果は、上の図から見ることができます。

Linuxのプロセス優先度調整方法を詳しく解説 Linuxのプロセス優先度調整方法を詳しく解説 Mar 15, 2024 am 08:39 AM

Linuxのプロセスの優先度調整方法を詳しく解説 Linuxシステムでは、プロセスの優先度によってプロセスの実行順序やシステム内のリソースの割り当てが決まります。プロセスの優先順位を合理的に調整すると、システムのパフォーマンスと効率が向上します。この記事では、Linuxでプロセスの優先度を調整する方法と具体的なコード例を詳しく紹介します。 1. プロセス優先度の概要 Linux システムでは、各プロセスには優先度が関連付けられています。優先順位の範囲は通常 -20 ~ 19 で、-20 は最高の優先順位を表し、19 は最高の優先順位を表します。

Windows 11 でタスク マネージャーのプロセス更新を停止し、タスクをより簡単に強制終了する方法 Windows 11 でタスク マネージャーのプロセス更新を停止し、タスクをより簡単に強制終了する方法 Aug 20, 2023 am 11:05 AM

Windows 11 および Windows 10 でタスク マネージャーのプロセス更新を一時停止する方法 CTRL + Window キー + Del キーを押してタスク マネージャーを開きます。デフォルトでは、タスク マネージャーは [プロセス] ウィンドウを開きます。ここでわかるように、すべてのアプリが際限なく動き回っており、選択するときにそれらを指すのが難しい場合があります。したがって、CTRL を押したままにすると、タスク マネージャーが一時停止されます。アプリを選択したり、下にスクロールしたりすることもできますが、常に CTRL ボタンを押し続ける必要があります。

なぜ Golang が高同時処理に適しているのかを分析してください。 なぜ Golang が高同時処理に適しているのかを分析してください。 Feb 29, 2024 pm 01:12 PM

Golang (Go 言語) は、Google によって開発されたプログラミング言語で、効率的、簡潔、同時実行、軽量のプログラミング エクスペリエンスを提供することを目的としています。同時実行機能が組み込まれており、同時実行性が高い状況でもパフォーマンスを向上させる強力なツールを開発者に提供します。この記事では、Golang が高同時処理に適している理由を詳しく説明し、具体的なコード例を示して説明します。 Golang の同時実行モデル Golang は、ゴルーチンとチャネルに基づく同時実行モデルを採用しています。五郎

Linux のプロセスがスリープするのはなぜですか? Linux のプロセスがスリープするのはなぜですか? Mar 20, 2024 pm 02:09 PM

Linux のプロセスがスリープするのはなぜですか? Linux オペレーティング システムでは、さまざまな理由や条件によりプロセスが休止状態になることがあります。プロセスが休止状態にあるときは、プロセスが一時的に中断され、特定の条件が満たされるまで実行を続行できないことを意味し、その後起動して実行を継続できます。次に、Linux でプロセスが休止状態に入るときの一般的な状況をいくつか詳しく紹介し、具体的なコード例で説明します。 I/O の完了を待機中: プロセスが I/O 操作 (読み取りなど) を開始したとき

See all articles