首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纠正卡桑德拉的不当使用

纠正卡桑德拉的不当使用
EN

Stack Overflow用户
提问于 2015-10-22 00:04:56
回答 1查看 87关注 0票数 0

我有一个类似的问题没有得到回答(但有许多评论):

How to make Cassandra fast

我的设置:服务- Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz,4GB Ram。Cassandra Datastax Community的两个节点:(2.1.3)。PHP 5.5.9使用datastax php驱动程序

我来自一个MySQL数据库知识,拥有非常基本的NoSQL知识,包括ElasticSearch (现在称为弹性)和MongoDB的文档存储。

当我读到如何使用卡桑德拉时,以下是我所理解的子弹

  • 它是分布的
  • 您可以复制环来分发数据。
  • 为了达到最大的效率,您需要建立分区键。
  • 重新考虑查询,而不是使用索引
  • 根据查询而不是数据建模
  • 删除是不好的
  • 您只能从主键集的第二个键开始排序。
  • 卡桑德拉写得“快”

我有一个PHP框架API,它接收批处理json数据,并作为最小值插入4个表,最多6个表(主要是由于我需要的不同类型的排序)。

一开始我只有两个卡桑德拉节点。我运行了Apache工作台来测试。然后,我添加了第三个节点,在较高的批处理大小并发时,它几乎只减少了一秒的时间。

代码语言:javascript
复制
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个字符)。

我的关键空间如下:

代码语言:javascript
复制
 user_data | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"1"}

我的“主要”问题是:我做错了什么?这似乎是相对较小的数据集,考虑到卡桑德拉是建立在BigDataTable上,以非常高的写入速度。

  • 为了加快速度,我是否在3之后添加了更多的节点?
  • 我是否更改了复制因子并执行仲裁/读/写,然后从datastax:c.html中寻找一个最佳位置?
  • 我是否切换了框架,比如使用node.js来获得更高的并发性。
  • 我是否重新工作我的表,因为我没有很好的例子,如何有效地使用列族?这件事我需要一些提示。

对于表中的问题:我正在跟踪用户的历史记录。用户有一个事件,并与媒体id相关联,而且还有额外的元数据。所以列是: event_type,user_id,time,media_id,extra_data。我需要对它们进行不同的排序,因此我为它们制作了不同的表(因为我理解Cassandra数据建模应该如何工作……我可能错了)。因此,我在不同的表中复制不同的数据。

帮助?

编辑部件在这里

该应用程序还附加了redis和mysql,用于其他CRUD感兴趣点,例如检索用户数据并缓存其以加快拉出速度。到目前为止,对于MySQL和Redis激活的avg,在Redis启动之后,我有一个72 on,在MySQL上启动180 on。

EN

回答 1

Stack Overflow用户

发布于 2015-10-22 03:48:34

第一个问题是,您试图对整个系统进行基准测试,而不知道任何单独的组件可以做什么。你是想看看一个单独的手术有多快吗?或者你每秒能做多少次手术?他们是不同的价值观。

我通常建议你从卡桑德拉的基准开始。现代卡桑德拉通常每台服务器每秒可以执行20-120 K的操作。对于RF=3,这意味着在5k到40k之间读取/秒或写/秒。使用cassandra -压力,以确保cassandra正在执行您的期望,然后尝试循环在您的应用程序,看看它是否匹配。如果您慢下来,那么您就知道应用程序是您的瓶颈,您可以开始考虑各种改进(不同的驱动程序、不同的语言、异步请求而不是同步等等)。

现在,你做的太多了,分析得太少了。把这个问题分解成小块。解决个别的问题,然后把拼图放在一起。

编辑:卡桑德拉2.1.3已经很老了。它有一些严重的虫子。使用2.1.11或2.2.3。如果您刚刚开始开发,2.2.3可能还可以(让我们假设您实际上将使用2.2.5左右的产品)。如果你准备明天去刺激,用2.1.x代替。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33271296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档