【问题标题】:Data storage in CassandraCassandra 中的数据存储
【发布时间】:2012-01-30 18:39:05
【问题描述】:

我目前正在努力寻找与 Cassandra 一起使用的正确数据格式。我猜这是因为它提供了比标准键值存储更多的深度。

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

  • 不同应用程序的键空间。
  • 不同应用程序部分的列族。
  • 在这些列族中,我有数据。

大部分数据以以下格式存储在单个列族中:

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

插入几个 100.000 个条目(每个

据我了解,列族应该正是存储我的数据主要部分的位置。将我的大部分数据放在一个列族而不是几个不同的列族中不应该是重点。

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


在评论中编辑以回答 DNA 的问题:

我正在比较开始测试之前插入的单个密钥所需的读取时间。

当数据库仍然为空时,测试密钥在开始时始终在 1.000 次。测试中写入的数据结构如下:

  • 由 5 个字符 + 20 个数字构建的 Key 标识的行
  • 一列(1 个字符)包含当前的 unix 时间戳

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

   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

因为这仅用于基本测试,所以仅在 Amazon 的单个节点(ec2 实例)上运行。每增加 250.000 行,读取时间似乎增加了大约 0.0003 秒。

我知道这些数字确实很小而且很棒,但是读取时间的线性增长并不是我所期望的。

我计划将带有大量小条目的大型 MySQL 服务器移至 Cassandra。它目前包含大约 750 亿个条目,它收集的新数据集数量非常快,因此读取时间的线性增加让我怀疑我是否朝着正确的方向前进。

【问题讨论】:

  • 您看到了什么性能,您希望获得什么性能?使用一个 CF 还是多个 CF 通常取决于您存储的数据的结构以及您需要的查询类型。您能否详细说明您的数据结构以及您正在执行的读取查询类型?您使用的是什么版本的 Cassandra,在什么硬件上?
  • @DNA:我保存的 PHP 值数组包含一些字符串(大约 10-20,每个长度为 10-500)。我还编辑了我的问题,以(希望)更好地解释我为什么要问这个问题以及我的“担忧”来自哪里。我在我的测试环境中使用版本 0.7.6-2。

标签: database-design cassandra


【解决方案1】:

感谢您更新问题。

您应该阅读这篇关于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

【讨论】:

  • 感谢您的 Netflix 文章。我将更多数据放入数据库中,并且在百万条目之后似乎不再增加。大约有 100.00 万个条目,读取时间仍然停留在约 0.002 秒左右。今天晚些时候,我升级到了最新的 Cassandra 版本并重新运行了测试。读取时间在大约 0.0016 左右保持不变。在达到“良好规模”的数据后,线性增长似乎就停止了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2019-02-12
  • 1970-01-01
  • 2015-01-11
  • 2015-08-29
  • 2012-03-26
相关资源
最近更新 更多