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