我们拥有key-multipleValues数据。每个密钥可以有大约500个值(每个值大约为200-300个字符),这些密钥的数量将大约为1000万。主要操作是检查给定密钥的值。
我一直在使用mysql,我有两个选项:每个键值一行,每个键一行,文本字段中包含所有值。但这些对我来说似乎并不高效模型有很多行,冗余和第二个模型文本字段会变得非常大。
我正在考虑使用nosql数据库用于此目的,之前我使用过mongodb,我认为它不适合我目前的情况。基于keyvalue或基于列系列的nosql db会更好。不需要分发。使用riak,redis,cassandra等的人分享你的想法。
由于
答案 0 :(得分:2)
尝试直接的规范化方法:使用此模式的一个表:
id (primary key)
key
value
每个key->值关系
都有一行为每列添加索引,查找应该相当有效。你有没有将其中任何一个描述为瓶颈?
答案 1 :(得分:2)
这确实直接映射到卡桑德拉。行键将是您的模型键,您的模型值将是Cassandra中的列名(是,名称)。您可以将Cassandra列值保留为空,或者在那里添加元数据(如时间戳)(如果有用)。
答案 2 :(得分:2)
根据您的描述,似乎某种键值存储将更适合您比较关系数据库。
数据本身似乎是非关系型的,为什么存储在关系存储中?使用像Cassandra这样的东西似乎是有效的。
我认为要存储此数据的典型数据结构将是一个列族,Key为Row-key,Columns为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}]},
...
...
]
}
希望这有帮助。
答案 3 :(得分:0)
我认为这不会超出单个机器上MySQL的规模。你需要调整插入,否则它将永远加载。您也可以考虑使用COMPRESS()或直接在应用程序中压缩值。可能会为您节省50%左右。
Redis基本上是一个内存数据库,所以它可能已经出局了。 Riak可能是一个不错的选择,或HBase或Cassandra。