我有很多(大约每秒100万)必须插入数据库的结构数据我看到了很多关于sql与noSql的基准测试,以及noSql的类型,然后收集cassandra作为数据库
但我创建了一个基准测试mysql与cassandra在写/更新/选择速度上的对比mysql在我的基准测试中有更好的性能,我想知道我的错误是什么??
php用作编程语言YACassandraPDO和cataloniaframework用作php驱动程序,PDO用作mysql驱动程序
我的服务器是centOS 6.5,有2核CPU和2GB RAM,mysql和cassandra具有默认配置
基准细节:
cassandra keyspace和column家族结构:创建密钥空间测试2WITH REPLICATION={"class":"SimpleStrategy","REPLICATION_factor":1}AND durable_writes=false;
CREATE TABLE test (
uuid int PRIMARY KEY,
symbol_id int,
bid int,
ask int,
time timestamp,
);
mysql数据库和表结构:CREATE数据库test
;
CREATE TABLE `test` (
`id` INT NOT NULL ,
`symbol_id` int,
`bid` int,
`ask` int,
time timestamp,
PRIMARY KEY (id)
)ENGINE=MyISAM;
我的基准测试结果:
在大约26秒的时间里,在cassandra中插入每100000条记录,在大约11s的中,在mysql中插入每个100000条记录
在关于卡桑德拉的24秒内每100000次更新一次,在大约mysql 中,12秒内每100000次更新一次
在大约卡桑德拉的741秒内选择每10000个,在大约mysql 中的21秒内选择每个10000
我的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);
通过说禁用可能的MySQL缓存
SELEC SQL_NO_CACHE ...
MySQL通过每次INSERT/UPDATE检查PRIMARY KEY的完整性。MariaDB至少可以在更新时禁用此功能,也可以在MySQL中使用。
如果你想测试cassandra,你可以简单地使用安装了datastax的cassandra压力工具。你可以在里面找到C: \Program Files\DataStax DDC\apache cassandra\tools\bin这是一个蝙蝠档案。甚至不需要写一行代码,只需使用所需的参数执行即可,并对cassandra进行基准测试。