我们有key-multipleValues的数据。每个键可以有大约500个值(每个值大约为200-300个字符),这样的键的数量将在1000万左右。主要操作是检查给定关键字的值。
我已经使用mysql很长一段时间了,我有两个选项:每个键值一行,每个键一行所有的值都在一个文本field.But中,这些对我来说似乎效率不高,因为第一个模型有很多行,冗余和第二个模型文本字段将变得非常大。
我正在考虑使用nosql数据库来达到这个目的,我以前用过mongodb,我认为它不适合我现在的情况。基于键值或基于列族的nosql db应该是better.It,不需要是使用riak,redis,cassandra等的distributed.Someone,请分享您的想法。
谢谢
发布于 2011-07-13 22:55:15
从您的描述来看,与关系数据库相比,似乎某种键值存储更适合您。
数据本身似乎是非关系型的,为什么要存储在关系型存储中呢?使用像Cassandra这样的东西似乎是有效的。
我认为用于存储此数据的典型数据结构将是一个列族,键作为行键,列作为值。
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-11 19:43:31
尝试直接的、规范化的方法:使用此模式的一个表:
id (primary key)
key
value每个键->值关系都有一行
为每一列添加一个索引,这样查找就会相当有效。您是否对此进行了分析,以显示瓶颈?
发布于 2011-07-13 00:21:45
这确实直接映射到Cassandra。行键将是您的模型键,而您的模型值将是Cassandra中的列名(是,名称)。您可以将Cassandra列值保留为空,或者在其中添加时间戳等元数据。
https://stackoverflow.com/questions/6649535
复制相似问题