在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中插入速度的主要内容,如果未能解决你的问题,请参考以下文章