在mysql vs cassandra中插入速度

Posted

技术标签:

【中文标题】在mysql vs cassandra中插入速度【英文标题】:insert speed in mysql vs cassandra 【发布时间】:2014-09-03 13:23:46 【问题描述】:

我有很多(大约一百万秒)必须插入数据库的结构数据 我看到很多关于 sql vs noSql 和 Nosql 类型的基准测试,然后收集 cassandra 作为数据库

但我创建了一个基准来测试 mysql 与 cassandra 的写入/更新/选择速度 mysql 在我的基准测试中有更好的性能,我想知道我的错误是什么?

php 用作编程语言 YACassandraPDO 和 cataloniaframework 用作 php 驱动,PDO 用作 mysql 驱动

我的服务器是 centOS 6.5,有 2 核 CPU 和 2GB RAM, mysql 和 cassandra 有默认配置

基准细节:

cassandra 键空间和列族结构: 创建密钥空间测试2 WITH REPLICATION = 'class' : 'SimpleStrategy', 'replication_factor' : 1 AND 持久写入 = 假;

CREATE TABLE test (
    uuid int PRIMARY KEY,
    symbol_id int,
    bid int,
    ask int,
    time timestamp,
);

mysql数据库和表结构: 创建数据库test;

CREATE TABLE `test` (
    `id` INT NOT NULL ,
    `symbol_id` int,
    `bid` int,
    `ask` int,
    time timestamp,
    PRIMARY KEY (id)
)ENGINE=MyISAM;

我的基准测试结果:

在 cassandra 中插入每 100000 条记录大约需要 26 秒, 在mysql中插入每100000条记录大约需要11s

在大约 cassandra 的 24 秒内更新每 100000 个, 在大约 mysql 的 12 秒内更新每 100000 个

在大约 cassandra 的 741 中选择每 10000 个, 21秒内SELECT每10000个约mysql

我的 php 代码用于基准测试:

cassandra 代码:

$db_handle = new PDO("$dbtype:host=$dbhost;port=$dbport;cqlversion=3.0.0;dbname=$dbname", $dbuser, $dbpass);
while ($count < $rowNum)
    $stmt = $db_handle->prepare("INSERT INTO test (uuid, symbol_id, bid, ask, time) values ($count, " . rand(1, 100) . ", " . rand(1, 10000) . ", ".  rand(1, 10000).", dateof(now())); ");
    $exec = $stmt->execute();     
 
 unset($db_handle);

mysql代码:

$db_handle = new PDO("$dbtype:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
while ($count < $rowNum)
    $stmt = $db_handle->prepare("INSERT INTO test (id, symbol_id, bid, ask, time) values ($count, " . rand(1, 100) . ", " . rand(1, 10000) . ", ".  rand(1, 10000).", now()); ");
    $exec = $stmt->execute();

unset($db_handle);

【问题讨论】:

你为什么认为你做错了什么? @shahab 。 . .您的测试可能更多地用于查询而不是底层数据库的prepare 时间,如果 MySQL 更好地利用查询缓存,我不会感到惊讶。您可以通过将 prepare 移到 while 之外并运行它无数次来测试这一点。另一种可能性是使用参数准备语句一次,然后在循环内分配参数。 也可能是驱动太慢了。 MySQL 的驱动程序已经有好几年的历史了,并且在那段时间里得到了改进。相比之下,Cassandra 的驱动程序比较新。 @DanBracuk 在大多数基准测试中,cassandra write 比 mysql 好,但我的基准测试显示相反,为什么? 我说的是客户端进程,而不是服务器。如果您有单个客户端写入 cassandra,那么即使对于单个服务器节点,您也不会接近最大写入速度 - cassandra 是为大量并发而设计的。 【参考方案1】:

通过说禁用可能的 MySQL 缓存

SELEC SQL_NO_CACHE ...

MySQL 在每次 INSERT/UPDATE 时检查 PRIMARY KEY 的完整性。 MariaDB 至少可以disable this 进行更新,可能也可以在 MySQL 中使用。

【讨论】:

【参考方案2】:

如果您想测试 cassandra,您可以简单地使用与 datastax 一起安装的 cassandra-stress 工具。 你可以在 C:\Program Files\DataStax-DDC\apache-cassandra\tools\bin 这是一个bat文件。 甚至不需要编写一行代码,只需使用所需的参数执行它并对 cassandra 进行基准测试。

【讨论】:

以上是关于在mysql vs cassandra中插入速度的主要内容,如果未能解决你的问题,请参考以下文章

更新/插入中的Cassandra不一致

Mongodb cassandra 和 Mysql对比

Apache Cassandra vs Datastax Cassandra [关闭]

Apache Cassandra 阅读解释

MySQL vs MSSQL INSERTs 速度测试

如何在 cassandra 中多插入行