我有很多(每秒约 100 万条)必须插入数据库的结构数据 我看到很多关于 sql 与 noSql 和 Nosql 类型的基准测试,然后收集 cassandra 作为数据库
但我创建了一个基准来测试 mysql 与 cassandra 的写入/更新/选择速度 mysql 在我的基准测试中有更好的性能,我想知道我的错误是什么??
php 用作编程语言 YACassandraPDO和 cataloniaframework用作 php 驱动程序和 PDO 用作 mysql 驱动程序
我的服务器是 centOS 6.5,2 核 CPU 和 2GB 内存, mysql和cassandra有默认配置
基准测试详情:
cassandra键空间和列族结构: 创建键空间测试2 WITH 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 TABLE `test` (
`id` INT NOT NULL ,
`symbol_id` int,
`bid` int,
`ask` int,
time timestamp,
PRIMARY KEY (id)
)ENGINE=MyISAM;
我的基准测试结果:
在cassandra中每插入100000条记录大约需要26s, mysql每插入100000条记录大约11s
在大约 cassandra 的 24 秒内更新每 100000 个, mysql 12s内更新每100000条
在大约cassandra的741s中选择每10000个, mysql 21秒内SELECT每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至少可以disable this对于更新,也可能适用于 MySQL。
关于mysql - 在 mysql vs cassandra 中插入速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645563/