我目前正在为卡桑德拉使用的正确数据格式而奋斗。我想这是因为它提供了比标准键值存储更多的深度。
我的数据格式目前定义如下:
大多数数据以下列格式存储在单个列家族中:
Key: UUID-1|UUID-2|UUID-3
Value: Array of PHP Values在插入了几个100.000个条目(每个<1kb)后,我在读取数据时会看到性能下降。
根据我的理解,列族应该准确地存储数据的主要部分。将我的大部分数据放在一个列族中,而不是几个不同的列族中,这不应该是重点。
我应该考虑将我的数据分成不同的列族,还是这种方法是正确的,但可能是问题的原因?
编辑在评论中回答DNA的问题:
在开始测试之前,我正在比较插入一个键所需的读取时间。
在数据库仍然是空的情况下,测试键在<0.0010中持续读取1.000次以上。在测试中编写的数据的结构如下:
我添加了条目,并重新运行相同的读测试,以比较读取时间。我在这里列出的阅读时间是较低的数字:
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.0003s。
我知道这些都是很小的数字,而且它们都很棒,但是读时间的线性增长不是我所期望的。
我计划将一个包含大量小条目的大型MySQL服务器移到Cassandra。它目前包含了大约750亿个条目,并且它正在收集的新数据集的数量非常快,因此,阅读时间的线性增长让我怀疑我是否走上了正确的方向。
发布于 2012-01-31 22:40:15
谢谢你更新这个问题。
您可能应该阅读这篇关于Netflix基准的文章。
使用相对较少的行数进行基准测试不会告诉您大型数据集的可伸缩性。在数百万行中运行这种测试并不困难。
如果您现在只是在测试,那么您可能应该升级到1.0分支(目前为1.0.7),因为这比0.7要快得多。
云服务器上的性能可能不能很好地代表实际本地硬件上的性能--尽管云服务器是集群测试的好主意。请参阅http://wiki.apache.org/cassandra/CassandraHardware
如果阅读延迟是您的主要关注点,那么请确保您熟悉Cassandra (keys_cached和rows_cached)中的缓存设置-例如,请参见http://wiki.apache.org/cassandra/StorageConfiguration。
https://stackoverflow.com/questions/9068968
复制相似问题