Nosql 为具有多个值、高度可扩展的密钥建议一个数据库

Nosql 为具有多个值、高度可扩展的密钥建议一个数据库,nosql,cassandra,redis,key-value,riak,Nosql,Cassandra,Redis,Key Value,Riak,我们有关键多值的数据。每个键可以有大约500个值(每个值大约为200-300个字符),这样的键的数量大约为1000万个。主要操作是检查给定键的值 我已经使用mysql很长一段时间了,我有两个选项:每一个键值对应一行,每一个键值对应一行,所有的值都在一个文本字段中。但是这些对我来说似乎并不有效,因为第一个模型有很多行,冗余和第二个模型文本字段将变得非常大 为此,我正在考虑使用nosql数据库,我以前使用过mongodb,我认为它不适合我目前的情况。基于键值或基于列族的nosql db会更好。它不需

我们有关键多值的数据。每个键可以有大约500个值(每个值大约为200-300个字符),这样的键的数量大约为1000万个。主要操作是检查给定键的值

我已经使用mysql很长一段时间了,我有两个选项:每一个键值对应一行,每一个键值对应一行,所有的值都在一个文本字段中。但是这些对我来说似乎并不有效,因为第一个模型有很多行,冗余和第二个模型文本字段将变得非常大

为此,我正在考虑使用nosql数据库,我以前使用过mongodb,我认为它不适合我目前的情况。基于键值或基于列族的nosql db会更好。它不需要分发。使用riak、redis、cassandra等的人请分享您的想法


谢谢

尝试直接、规范化的方法:一个具有此模式的表:

id (primary key)
key
value
每个键->值关系都有一行


为每一列添加一个索引,查找应该相当有效。您是否分析过其中任何一个瓶颈?

这确实直接映射到Cassandra。行键将是模型键,模型值将是Cassandra中的列名(是的,名称)。您可以将Cassandra列值保留为空,或者在其中添加元数据,如timestamp,如果这样做有用的话。

我不认为这超出了单台机器上MySQL的规模。您需要调整插入内容,否则加载将花费很长时间。您还可以考虑使用压缩()或直接在应用程序中压缩值。也许能帮你节省50%左右


Redis基本上是一个内存数据库,所以它可能已经过时了。Riak或HBase或Cassandra都是不错的选择

从您的描述来看,比较关系数据库,某种类型的键值存储似乎更适合您

数据本身似乎是非关系的,为什么要存储在关系存储中?使用像卡桑德拉这样的东西似乎是有效的

我认为存储此数据的典型数据结构将是一个列族,其中键作为行键,列作为值

MyDATA: (ColumnFamily)
  RowKey=>Key
    Column1=>val1
    Column2=>val2
    ...
    ...
    ColumnN=valN
数据看起来像(JSON符号):


希望这能有所帮助。

使用经过验证的、稳定的SQL产品。我只是好奇(对于我自己的问题)-为什么MongoDB不适合您的情况?谢谢,但我不记得我为什么这么想了:)。最终使用了Redis,我很高兴iti将有1000万个键,每个键都有500个VAL,所以有50亿行。我认为任何人都不应该分析mysql的性能:)@kaka:与其执行1000万个字符串操作,不如直接对值进行索引!很抱歉,没有收到您的信息,请解释。我应该用一个键查询以获得相应的值。您说您的主要应用程序正在查找值。如果你有一个关于这些值的索引,那么这样做会快得多!是的,但我也需要根据键查找,担心超过十亿行。不管怎么说,谢谢你的投入,这肯定很有帮助。比其他人有什么特别的优势吗?我会读更多关于它的内容,谢谢。你们是说我把每个值存储在一行中的解决方案吗?从来没有听说过mysql在一台超过20亿行的机器上运行,如果它运行良好,那就太棒了
MyDATA (CF){
    [
      {key1:[{val1-1:'', timestamp}, {val1-2:'', timestamp}, .., {val1-500:'', timestamp}]},
      {key2:[{val2-1:'', timestamp}, {val2-2:'', timestamp}, .., {val2-500:'', timestamp}]},
      ...
      ...
    ]
}