潜在的に大量のデータを格納するための戦略を研究しており、最適なストレージ テクノロジを見つけたいと考えています。MySQL、NoSQL、フラット ファイルなど、あらゆる提案を歓迎します。
私がやっていること:
- すべての 4 バイト整数を一連のユーザーに配布します。
- 数値は 0 ~ 4,294,967,295 の符号なし 4 バイト整数範囲です。
- ユーザーはこれらの番号を何千も持つことができます。
- 数千のユーザーを期待していますが、数百万の可能性はわずかです。
- 番号は、一度にすべてではなく、一定期間にわたって配布されます
- AWS、いくつかのサーバー、および EBS ボリュームを使用する
一番気になるのは収納スペース。これは安価なボリュームで行う必要があり、大量の AWS では多少の費用がかかります。
数の割り当てを数学的に表現することについて少し調査しましたが、それにはあまりにも多くの問題が見つかりました。
要件
- 分析およびリアルタイムのデータ表示のためのある程度効率的な取得。超高速である必要はありませんが、合理的です。
- ユーザー ID -> 番号と番号 -> ユーザー ID の両方向でルックアップを行う必要があります。
- 収納スペースはできるだけ少なく。
- 妥当な (8 GB 未満の) メモリ使用量。
- 正確である必要があり、番号を紛失したり、番号を誤って割り当てたりすることはできません。
これまでに見つけたものは次のとおりです。
2 バイトのユーザー ID に関連付けられたすべての 4 バイトの数値を格納するための下限は、((4+2) * 2^32 / 1024 / 1024 / 1024) = 24 GB です。
Cassandra は、キーと値のペアのデータベースです。このhttp://www.datastax.com/docs/0.8/cluster_architecture/cluster_planningに基づいて、4 バイトの数値をすべてキーとして使用し、2 バイトのユーザー ID を値として使用した場合、約 260 GB のストレージが必要になると計算します(複製なし)。
Redis はインメモリです。AWS では大量のメモリが非常に高価になるため、これにより可能性が排除されると思います。
現在、MySQL と Mongo に関する同様の情報を探しています。
これが私の質問です。最善の解決策を決定するために使用できる参照はありますか、それとも私が考えていない代替の解決策はありますか?
皆さんありがとう。
更新 - 追加の要件を追加しました。ユーザー ID に基づいて番号を検索し、番号に基づいてユーザー ID を検索する必要があります。また、Redis はインメモリであるため、直接実装すると、Redis はディスク ベースのソリューションよりも高価になります。