2

潜在的に大量のデータを格納するための戦略を研究しており、最適なストレージ テクノロジを見つけたいと考えています。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 はディスク ベースのソリューションよりも高価になります。

4

2 に答える 2

2

実際には、ユーザーを持つ番号のみを保存する必要があります。保存されていない番号を探している場合は、空の結果が返されるため、番号が割り当てられていないことがわかります。

MySQL の場合:

CREATE TABLE mashup
(
   id       bigint primary key,
   user_id  int,

   index (user_id);
);

主キーは、「id」にインデックスがあることを確認します。また、bigint には余裕があるため、整数オーバーフローなどの厄介な問題に遭遇することはありません。次に、ユーザーごとに、次のようにレコードを挿入します。

INSERT into mashup VALUES (181870388, 90128);

番号にユーザーがいるかどうかを知りたいですか?

SELECT user_id FROM mashup where id=xxxxx;

または

SELECT COUNT(*) FROM mashup where id=xxxxx;

ユーザーが持っている番号を知りたいですか?

SELECT id FROM mashup WHERE user_id=yyyyy;

優れた点は、40 億の数字すべてを保存するスペースを無駄にせず、ユーザー エントリの数だけを保存できることです。

于 2013-01-13T20:54:37.517 に答える
0

私たちの例が役立つかもしれません。couchdbヨーロッパの大国の移植された電話番号のセット全体を保存するために使用しています。これを初めて索引付けするのはかなり時間がかかりますが、その後map-reduceは非常に速くなります。

ディスクの使用量は次のとおりです。

Usage: 8.2 GB
Numbers of documents: 22109793
Average characters per document: 272

これがあなたの選択に役立つことを願っています。

于 2013-01-14T11:29:14.653 に答える