5

key-multipleValues を持つデータがあります。各キーには約 500 の値を含めることができ (各値は約 200 ~ 300 文字になります)、そのようなキーの数は約 1,000 万になります。主な操作は、与えられたキーの値をチェックすることです。

私は長い間mysqlを使用してきました.2つのオプションがあります.キー値ごとに1行、テキストフィールドにすべての値を持つキーごとに1行.しかし、最初のモデルには多くの値があるため、これらは効率的ではないようです.行数、冗長性、および 2 番目のモデル テキスト フィールドが非常に大きくなります。

この目的でnosqlデータベースを使用することを検討しています。以前にmongodbを使用したことがあり、現在のケースには適していないと思います。キー値ベースまたはカラム ファミリー ベースの nosql db の方がよいでしょう。配布する必要はありません。riak、redis、cassandra などを使用したことがある人は、あなたの考えを共有してください。

ありがとう

4

4 に答える 4

2

あなたの説明から、リレーショナルDBを比較するには、ある種のKey-Valueストアの方が適しているようです。

データ自体は非リレーショナルのようですが、なぜリレーショナルストレージに保存するのですか?カサンドラのようなものを使用することは有効なようです。

このデータを格納するための一般的なデータ構造は、行キーとしてキー、値として列を持つ列ファミリーになると思います。

MyDATA: (ColumnFamily)
  RowKey=>Key
    Column1=>val1
    Column2=>val2
    ...
    ...
    ColumnN=valN

データは次のようになります(JSON表記):

MyDATA (CF){
    [
      {key1:[{val1-1:'', timestamp}, {val1-2:'', timestamp}, .., {val1-500:'', timestamp}]},
      {key2:[{val2-1:'', timestamp}, {val2-2:'', timestamp}, .., {val2-500:'', timestamp}]},
      ...
      ...
    ]
}

うまくいけば、これがお役に立てば幸いです。

于 2011-07-13T14:55:14.830 に答える
2

これは、Cassandra に直接マップされます。行キーはモデル キーになり、モデル値は Cassandra の列名 (はい、名前) になります。Cassandra 列の値を空のままにすることも、必要に応じてタイムスタンプなどのメタデータを追加することもできます。

于 2011-07-12T16:21:45.447 に答える
0

これは、単一のマシンでのMySQLの規模を超えているとは思いません。インサートを調整する必要があります。そうしないと、ロードに永遠に時間がかかります。また、COMPRESS()を使用して、またはアプリで直接値を圧縮することを検討することもできます。50%程度節約できるかもしれません。

Redisは基本的にインメモリデータベースであるため、おそらくアウトになっています。Riakはまともな選択かHBaseまたはCassandraかもしれません。

于 2011-07-13T04:15:16.030 に答える