【发布时间】:2015-10-22 00:04:56
【问题描述】:
我有一个类似的问题没有得到解答(但有很多 cmets):
我的设置: Ubuntu 服务器 AWS 服务 - Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz,4GB Ram。 Cassandra Datastax 社区版的 2 个节点:(2.1.3)。 PHP 5.5.9。使用datastax php-driver
我来自 MySQL 数据库知识,在 ElasticSearch(现在称为 Elastic)和 MongoDB 方面的文档存储方面具有非常基本的 NoSQL 动手能力。
当我阅读如何使用 Cassandra 时,这是我理解的要点
- 分布式
- 您可以使用复制环来分发数据
- 您需要建立分区键以获得最大效率
- 重新考虑您的查询,而不是使用索引
- 根据查询而非数据建模
- 删除不好
- 您只能从主键集的第二个键开始排序
- Cassandra 的写入速度“很快”
我有一个 PHP Silex 框架 API,它接收批处理 json 数据并插入到最少 4 个表中,最多 6 个(主要是由于我需要不同类型的排序)。
起初我只有两个 Cassandra 节点。我运行 Apache Bench 进行测试。然后我添加了第三个节点,在更高的批量大小并发下,它几乎只减少了几分之一秒。
Concurrency Batch size avg. time (ms) - 2 Nodes avg. time (ms) - 3 Nodes
1 5 288 180
1 50 421 302
1 400 1 298 1 504
25 5 1 993 2 111
25 50 3 636 3 466
25 400 32 208 21 032
100 5 5 115 5 167
100 50 11 776 10 675
100 400 61 892 60 454
批量大小是它每次调用的条目数(对 4-6 个表)。 所以 5 批,意味着它正在制作 5x (4-6) 表插入价值的数据。在更高的批处理大小/并发下,应用程序超时。
一个表中有 5 列数据相对较小(主要是 int,文本长度不超过 10 个字符)
我的密钥空间如下:
user_data | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"1"}
我的“主要”问题是:我做错了什么?考虑到 Cassandra 是在 BigDataTable 上以非常高的写入速度构建的,这似乎是一个相对较小的数据集。
- 为了加快速度,我是否添加了超过 3 个的节点?
- 我是否要更改我的复制因子并执行 Quorum / Read / Write,然后从 datastax 文档中寻找最佳位置:http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html
- 是否要切换框架,例如转到 node.js 以获得更高的并发性。
- 我是否要重新设计我的表格,因为我没有很好的例子来说明如何有效地使用列族?我需要一些提示。
对于表格问题: 我正在跟踪用户的历史记录。用户有一个事件并关联到一个媒体 ID,还有额外的元数据。 所以列是:event_type、user_id、time、media_id、extra_data。 我需要对它们进行不同的排序,因此我为它们制作了不同的表格(因为我了解 Cassandra 数据建模应该如何工作......我可能错了)。因此,我在不同的表中复制不同的数据。
帮助?
在此处编辑部分
该应用程序还为其他感兴趣的 CRUD 点附加了 redis 和 mysql,例如检索用户数据并将其缓存以更快地提取。 到目前为止,平均使用 MySQL,然后激活 Redis,Redis 启动后我有 72 毫秒,MySQL pre-redis 有 180 毫秒。
【问题讨论】:
标签: performance cassandra distributed cassandra-2.0