我有一个类似的问题没有得到回答(但有许多评论):
我的设置:服务- 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工作台来测试。然后,我添加了第三个节点,在较高的批处理大小并发时,它几乎只减少了一秒的时间。
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"}我的“主要”问题是:我做错了什么?这似乎是相对较小的数据集,考虑到卡桑德拉是建立在BigDataTable上,以非常高的写入速度。
对于表中的问题:我正在跟踪用户的历史记录。用户有一个事件,并与媒体id相关联,而且还有额外的元数据。所以列是: event_type,user_id,time,media_id,extra_data。我需要对它们进行不同的排序,因此我为它们制作了不同的表(因为我理解Cassandra数据建模应该如何工作……我可能错了)。因此,我在不同的表中复制不同的数据。
帮助?
编辑部件在这里
该应用程序还附加了redis和mysql,用于其他CRUD感兴趣点,例如检索用户数据并缓存其以加快拉出速度。到目前为止,对于MySQL和Redis激活的avg,在Redis启动之后,我有一个72 on,在MySQL上启动180 on。
发布于 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代替。
https://stackoverflow.com/questions/33271296
复制相似问题