为每天数十亿次读/写选择最佳数据库 - Cassandra和蜗牛一样慢

时间:2018-04-25 06:23:50

标签: database database-design cassandra nosql cassandra-3.0

我正在为我们的一个项目比较不同的数据库。 我们需要10亿次插入/天和数十亿次读取(每个select语句应该读取50行)。

每个记录都有很少的字段,主要是id列和平均500字节的blob。

我正在尝试在我的机器中进行模拟。 我可以在文件系统中达到50,000次插入/秒(这不好,因为每个记录浪费了大量空间)。

我可以在mongodb中达到30,000次插入/秒(但我读到它在复制/分区节点中表现不佳)。

我可以在mysql中达到20,000次/秒,meh。

但是Cassandra,考虑得太慢了:每秒只有1,500次插入! 起初我认为问题在于我正在使用的驱动程序,然后我尝试了不同的驱动程序,没有那么不同。我试图通过多个进程插入,但仍然比其他进程慢。

所有基准都说Cassandra最快,但结果不佳。我错过了什么?

我们需要的正常模式如下(* _uid是20字节的二进制数据,保证按升序和唯一):

create table records
              (
              record_uid blob PRIMARY KEY,
              user_uid blob,
              product_uid blob,
              data blob
              );

此外,是否有更好的建议能够以更低的成本满足我们的需求?

P.S。这是我用来测试的代码:

$cluster  = Cassandra::cluster()->build();
$keyspace  = 'benchmark';
$session  = $cluster->connect($keyspace);

$prepare    = $session->prepare("INSERT INTO records (record_uid, user_uid, product_uid, data) VALUES (?, ?, ?, ?)");




$start = microtime(true);


for($i = 0; $i < 100000; $i++)
{
    $values = [
        'message_uid' => new Cassandra\Blob(uuid()),
        'user_uid' => new Cassandra\Blob(uuid()),
        'room_uid' => new Cassandra\Blob(uuid()),
        'message' => new Cassandra\Blob('This is a test!!!!!!!!!!!!')
    ];


    $options = ['arguments' => $values];
    $session->execute($prepare, $options);
}


$time = microtime(true) - $start;
$insert_per_second = $time / $i;

echo "execution time: $time seconds\r\n"; // ~100 seconds
echo "insert per second: $insert_per_seconds\r\n"; // ~1500 records / sec

0 个答案:

没有答案