2012-01-30 141 views
1

我目前正在努力使用与Cassandra一起使用的正确数据格式。我想这是因为它提供的额外深度超过标准键值存储。卡桑德拉的数据存储器

我的数据格式目前定义是这样的:

  • Keyspaces针对不同的应用。
  • 不同应用部分的列族。
  • 在这些列系列中我有数据。

大部分数据存储在单个柱族内的格式为:

Key: UUID-1|UUID-2|UUID-3 
Value: Array of PHP Values 

插入几个100.000项之后(各< 1KB)我看到性能退化读取数据时。

从我的理解中,Column家族应该正是我的数据的主要部分的存储位置。将我的大部分数据放在一个Column Family中而不是几个不同的数据中不应该成为关键。

我应该考虑将我的数据分割成不同的列族还是方法正确,但是其他原因可能是问题的原因?


编辑回答的评论DNA的问题:

我比较需要我开始我的测试之前已插入一个键读取时间。

当数据库仍然为空时,测试密钥始终在< 0.0010s内始终读取> 1.000次。写入测试数据的结构是这样的:

  • 包含当前Unix时间戳
由内置有5个字符+ 20个数字
  • 有一列(1个字节)一个键标识的行

    我添加了条目并重新运行相同的读取测试以比较读取时间。读次我在这里列出的是较低的数字:

    Entries | Read Time 
         0 | 0.0010 
        150.000 | 0.0013 
        300.000 | 0.0014 
        500.000 | 0.0016 
        750.000 | 0.0019 
    1.000.000 | 0.0022 
    

    因为这仅仅是基本的测试,这是只在亚马逊单个节点(EC2实例)上运行。对于每250.000个新行,读取时间似乎会增加约0.0003秒。

    我知道这些数字非常小,它们很棒,但读取时间的线性增长并不是我所期望的。

    我打算将大量的小型条目移植到Cassandra上。它目前包含约750亿条目,它收集的新数据集的数量非常快,读取时间线性增加,因此让我怀疑是否正朝着正确的方向前进。

  • +0

    你看到了什么样的表现,你期待什么表现?无论您使用一个CF还是多个CF,通常取决于您要存储的数据的结构以及所需的查询类型。你能否详细说明你的数据结构以及你正在读取的查询类型?你在使用什么版本的Cassandra,在什么硬件上? – DNA 2012-01-30 23:01:31

    +0

    @DNA:我正在保存的PHP值数组包含一些字符串(大约10-20,每个长度为10-500)。我还编辑了我的问题(希望)更好地解释我为什么问这个问题以及我的“担忧”来自哪里。我正在测试环境中使用0.7.6-2版本。 – favo 2012-01-31 19:04:32

    回答

    2

    感谢您更新问题。

    您应该阅读这篇关于Netflix benchmarking的文章。

    行数相对较少的基准测试不会告诉您任何有关大型数据集的可伸缩性的信息。对数百万行进行这种测试并不困难。

    如果您现在只是测试,那么您应该升级到1.0分支(目前为1.0.7),因为它明显快于0.7。

    云服务器的性能可能并不能真正代表真正的本地硬件的性能 - 尽管云服务器对于集群测试来说是一个好主意。请参阅http://wiki.apache.org/cassandra/CassandraHardware

    如果读取延迟是您的关键问题,那么请确保您熟悉Cassandra中的缓存设置(keys_cached和rows_cached) - 例如,请参阅http://wiki.apache.org/cassandra/StorageConfiguration

    +1

    谢谢你的Netflix文章。我在数据库中投入了更多的数据,并且在数百万条记录后似乎不再增加。大约有100,000个条目,读取时间仍然约为0.002秒。今天晚些时候,我升级到最新的Cassandra版本并重新运行测试。阅读时间约在0.0016左右。线性增长似乎只是在达到“大小合适”的数据后停止。 – favo 2012-02-01 19:28:01