为什么Apache Cassandra的写入速度与MongoDB,Redis和MySql相比如此之慢

阿内什·维詹德兰(Aneesh Vijendran)

我最近开始为客户试用一些noSQL原型。他们有一个实时应用程序,该应用程序执行大量插入操作,但读取次数较少(当前他们使用的是MySql,并想尝试一些noSQL解决方案)

在周末,我尝试将Cassandra 2.0,MongoDB 2.4.9和Redis与普通的Mysql 5.5 DB进行比较。所有这些都在我的Windows i3核心2.30 Ghz / 8GB RAM笔记本电脑上运行,因此没有高端的高档计算机。

表结构是一个简单的结构,如下所示。尽管它是MySql DESC,但Cassandra具有相同的结构,在MongoDb中,它作为JSON / BSON存储,但具有相同的结构和索引。对于所有三个数据库,它都有两个索引(oneway_id和twoway_id)。

结构(对于所有四个数据库)

+--------------+---------------------+
| Field        | Type                |
+--------------+---------------------+
| tmstamp      | bigint(20) unsigned |
| field_1      | bigint(20) unsigned |
| field_2      | varchar(64)         |
| field_3      | varchar(64)         |
| field_4      | tinyint(3) unsigned |
| field_5      | bigint(20) unsigned |
| field_6      | varchar(25)         |
| field_7      | varchar(15)         |
| field_8      | varchar(15)         |
| field_9      | varchar(15)         |
+--------------+---------------------+

数据库/环境详细信息

  • 带有MySQL Java Connector 5.1.28的MySQL 5.6(64位)
  • 带有datastax 2.0 Java驱动程序的Apache Cassandra 2.0
  • 带有mongo Java驱动程序2.12.0的MongoDB 2.4.6
  • 在Linux机器上运行的Redis 2.8.17
  • Oracle Java 1.6(64位)
  • Microsoft Windows 7(64位)
  • 英特尔i3核心2.30 Ghz处理器
  • 8GB RAM

创建了一个简单的Java测试用例,这些是我得到的结果(尽管不一致的数字相同,但是延迟的方式几乎相同):

100,000条记录

  • MySql 1000,000-46秒
  • 卡桑德拉-54秒
  • MongoDb-2秒

500,000条记录

  • MySql 1000,000-142秒
  • 卡桑德拉-299秒
  • MongoDb-41秒

1,000,000条记录

  • MySql 1000,000-349秒
  • 卡桑德拉-699秒
  • MongoDb-51秒
  • Redis-34秒

我的问题是,为什么Cassandra会花这么长的时间来插入这么小的和简单的表?

在Cassandra中,我尝试了内联循环sql插入和批处理插入。有趣的是批量插入花费了更多时间。我遵循的批处理插入文档是:

http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0

我不想使用asyncExecute,因为它没有给我确切的插入时间。

我使用的批量插入是这样的(比普通插入需要更长的时间)

PreparedStatement ps = session.prepare("INSERT INTO some_table (val_1, val_2, val_3, val_4) VALUES (?, ?, ?, ?)");
BatchStatement batch = new BatchStatement();

//for loop start
batch.add(ps.bind(uid, mid1, title1, body1));
//for loop end

session.execute(batch);

我使用插入的内联循环是这样的

String sqlInsert = "INSERT INTO some_table (val_1, val_2, val_3, val_4) VALUES (";

// for loop start

sqlInsert += uid+", "+", "+mid1+", "+title1+", "+body1+")";
session.execute(sqlInsert);

// for loop end

现在为什么Cassandara会比mysql慢并且更重要-为什么MongoDB会比Cassandra快得多我真的希望自己做错了什么?

有没有办法像MongoDB一样将JSON / BSON对象直接插入到Cassandra中?我想这可能会加快速度吗?可以请一些专家帮助我吗?如果没有答案,我将得出结论,MongoDB比Cassandra更好!

拉斯

您的代码正在使用串行插入。每个插入必须等待上一个插入完成并返回确认,然后才能开始下一个插入。这是对任何可以处理多个传入连接的数据库进行基准测试的不好方法。如果您确实不想使用execute_async(正确的方法),则应编写多线程压力程序,以使插入不会阻塞(在客户端),并且确实受到Cassandra节点的限制。基本上,您所看到的是客户端程序的运行速度,而不是数据库的功能。

博客文章兴趣点:

http://www.datastax.com/dev/blog/how-not-to-benchmark-cassandra

正确进行负载生成只有两个原则:

满足Cassandra足够的工作量在单独的计算机上生成工作负载就是这样!但这常常做错了,从与Cassandra一起在同一台笔记本电脑上运行的单线程客户端的极端情况到Python Global Interpreter Lock的更微妙的问题。似乎就像二进制搜索一样,构建一个好的负载生成器非常困难。如果可能的话,避免自己动手的诱惑,并使用经过考验的东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么与MongoDB,Redis和MySql相比Apache Cassandra的写入速度如此之慢

来自分类Dev

为什么在MongoDB中对索引项进行“区别”和“计数”命令的速度如此之慢?

来自分类Dev

为什么jQuery选择器功能与本机DOM方法相比如此之慢

来自分类Dev

为什么在Python 3.3中打印速度如此之慢,我该如何解决?

来自分类Dev

为什么从Oracle外部表返回数据的速度如此之慢?

来自分类Dev

为什么在索引的Parquet文件上计算形状的速度如此之慢?

来自分类Dev

为什么从Canonical Partners资源库下载速度如此之慢?

来自分类Dev

为什么在Python 3.3中打印速度如此之慢,我该如何解决?

来自分类Dev

为什么 Nautilus 将文件复制到 Google Drive 的速度如此之慢?

来自分类Dev

为什么Spark Row对象与等效结构相比如此之大?

来自分类Dev

为什么ColdFusion启动,解析,编译,加载和关闭加载时间如此之慢?

来自分类Dev

为什么此JavaScript页面重定向如此之慢?

来自分类Dev

为什么此JavaScript页面重定向如此之慢?

来自分类Dev

为什么这种分类可视化是如此之慢?

来自分类Dev

Python:为什么 Python TCP 客户端在不同的 PC 上接收数据的速度如此之慢?

来自分类Dev

为什么Windows第一次打开文件时速度如此之慢,并且有更快的方法

来自分类Dev

为什么Spark从S3读取和写入如此之快

来自分类Dev

为什么使用 boto3 遍历分页器返回的页面如此之慢?

来自分类Dev

为什么从Canonical Partners资源库下载如此之慢?

来自分类Dev

Redis-为什么这段代码是如此之快?

来自分类Dev

为什么与Azure Redis缓存的连接如此之高?

来自分类Dev

为什么 GKE 计算百分比如此之高

来自分类Dev

为什么外部USB 2.0驱动器上的数据传输速率如此之慢?

来自分类Dev

为什么外部USB 2.0驱动器上的数据传输速率如此之慢?

来自分类Dev

为什么将1250个字符串与90k个模式匹配如此之慢?

来自分类Dev

Google Dataflow和Apache Beam:为什么选择ValueProvider

来自分类Dev

为什么jQuery选择器功能与本地DOM方法相比如此慢

来自分类Dev

为什么pandas.read_fwf函数与某些python替代方法相比如此慢?

来自分类Dev

为什么计算时差如此之大?

Related 相关文章

  1. 1

    为什么与MongoDB,Redis和MySql相比Apache Cassandra的写入速度如此之慢

  2. 2

    为什么在MongoDB中对索引项进行“区别”和“计数”命令的速度如此之慢?

  3. 3

    为什么jQuery选择器功能与本机DOM方法相比如此之慢

  4. 4

    为什么在Python 3.3中打印速度如此之慢,我该如何解决?

  5. 5

    为什么从Oracle外部表返回数据的速度如此之慢?

  6. 6

    为什么在索引的Parquet文件上计算形状的速度如此之慢?

  7. 7

    为什么从Canonical Partners资源库下载速度如此之慢?

  8. 8

    为什么在Python 3.3中打印速度如此之慢,我该如何解决?

  9. 9

    为什么 Nautilus 将文件复制到 Google Drive 的速度如此之慢?

  10. 10

    为什么Spark Row对象与等效结构相比如此之大?

  11. 11

    为什么ColdFusion启动,解析,编译,加载和关闭加载时间如此之慢?

  12. 12

    为什么此JavaScript页面重定向如此之慢?

  13. 13

    为什么此JavaScript页面重定向如此之慢?

  14. 14

    为什么这种分类可视化是如此之慢?

  15. 15

    Python:为什么 Python TCP 客户端在不同的 PC 上接收数据的速度如此之慢?

  16. 16

    为什么Windows第一次打开文件时速度如此之慢,并且有更快的方法

  17. 17

    为什么Spark从S3读取和写入如此之快

  18. 18

    为什么使用 boto3 遍历分页器返回的页面如此之慢?

  19. 19

    为什么从Canonical Partners资源库下载如此之慢?

  20. 20

    Redis-为什么这段代码是如此之快?

  21. 21

    为什么与Azure Redis缓存的连接如此之高?

  22. 22

    为什么 GKE 计算百分比如此之高

  23. 23

    为什么外部USB 2.0驱动器上的数据传输速率如此之慢?

  24. 24

    为什么外部USB 2.0驱动器上的数据传输速率如此之慢?

  25. 25

    为什么将1250个字符串与90k个模式匹配如此之慢?

  26. 26

    Google Dataflow和Apache Beam:为什么选择ValueProvider

  27. 27

    为什么jQuery选择器功能与本地DOM方法相比如此慢

  28. 28

    为什么pandas.read_fwf函数与某些python替代方法相比如此慢?

  29. 29

    为什么计算时差如此之大?

热门标签

归档