与Mariadb相比,CockacredDB插入缓慢



我正在进行一些测试,以查看我是否可以将cockroachdb用于我的小项目。我在同一DC中创建了两个相同的VPS'E,并在其中一个上安装了CockroachdB,另一个在Mariadb上安装了CockroactDB,然后创建了两个测试数据库来存储数据。一次插入1m的批次插入5K。我没有在VPS/DB服务器上进行任何更改,它们只是像安装后一样运行。

cock架模式:

root@:26257/test> show create table customers;
+-----------+------------------------------------------------------------------+
|   Table   |                           CreateTable                            
|
+-----------+------------------------------------------------------------------+
| customers | CREATE TABLE customers (␤                                        
|
|           |     id INT NOT NULL DEFAULT unique_rowid(),␤                     
|
|           |     first_name STRING NULL,␤                                     
|
|           |     last_name STRING NULL,␤                                      
|
|           |     age INT NULL,␤                                               
|
|           |     CONSTRAINT "primary" PRIMARY KEY (id ASC),␤                  
|
|           |     FAMILY "primary" (id, first_name, last_name, age)␤ |
|           | )                                                                
|
+-----------+------------------------------------------------------------------+

Mariadb:

MariaDB [test]> show create table customers G;
*************************** 1. row ***************************
   Table: customers
Create Table: CREATE TABLE `customers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(250) DEFAULT NULL,
  `last_name` varchar(250) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7000001 DEFAULT CHARSET=latin1

使用Golang,插入脚本很愚蠢,很快就将一堆数据插入数据库中(对于cockleachdb和Mariadb都是相同的,差异很小,即:连接字符串(:

(
package main
import "database/sql"
import _ "github.com/lib/pq"
import "fmt"
import "strings"
import "math/rand"
import "time"
func init() {
    rand.Seed(time.Now().UnixNano())
}
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
func RandStringRunes(n int) string {
    b := make([]rune, n)
    for i := range b {
        b[i] = letterRunes[rand.Intn(len(letterRunes))]
    }
    return string(b)
}

func main() {
    db, err := sql.Open("postgres", "postgresql://root@localhost:26257/test?sslmode=disable")
    if err != nil {
        panic(err)
    }
        sqlStr := "INSERT INTO customers(first_name, last_name, age) VALUES"
    insert := ""
    for i := 0; i < 1000000; i++ {
        fname := RandStringRunes(30)
        lname := RandStringRunes(39)
        age := rand.Intn(100)
        insert += fmt.Sprintf("('%s', '%s', %d),", fname, lname, age)
        if i%5000 == 0 {
            sql := sqlStr + strings.Trim(insert, ",")
            insert = ""
            _, err := db.Exec(sql)
            if err != nil {
                panic(err)
            }
        }
    }
    if len(insert) > 0 {
        sql := sqlStr + strings.Trim(insert, ",")
        insert = ""
        _, err := db.Exec(sql)
        if err != nil {
            panic(err)
        }
    }
}

结果:

Mariadb:

[root@mariadb ~]# time ./insert
real    0m40.650s
user    0m33.784s
sys 0m0.112s
[root@mariadb ~]# 

蟑螂:

[root@cockroachdb ~]# time ./insert
real    3m42.909s
user    0m35.620s
sys 0m0.144s

我正在使用Mariadb:

[root@mariadb ~]# mysql --version
mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

和cock虫:

[root@cockroachdb ~]# cockroach version
Build Tag:    v1.0.1
Build Time:   2017/05/25 15:17:49
Distribution: CCL
Platform:     linux amd64
Go Version:   go1.8.1
C Compiler:   gcc 6.3.0
Build SHA-1:  50fd18dcf8da75a0f4980344a885fe6105d0cf23
Build Type:   release
[root@cockroachdb ~]#

我知道使用随机数据可能会影响数字,但是我几乎一直都会得到这些数字,因此具有足够的一致性。

这些数字对于cock虫是否正确,上述版本中的插件较慢?

另外,计数表中的所有记录也很慢(select count(*) from customers(,不确定要确切地通过多少,因为我从MariaIadB服务器中获得的结果集中没有计时器,但是MariaiaDB服务器会返回结果在不到5秒的时间内,cock虫从我的计数中需要10秒钟。

我喜欢更改桌子以添加新列,例如,与cock虫一起立即使用,而Maridb的桌子上的桌子上的桌子上的记录将近30秒。

任何想法都得到高度赞赏。
谢谢。

cockrouckdb 1.0.1(和1.0(剩下的调试断言,在批量操作中造成了巨大的放缓。该断言将在1.0.2中删除(计划在几周内发布(。为了进行比较,这是我对1.0.1跑步时看到的:

$ time ./insert
real    2m3.125s
user    0m35.942s
sys     0m6.659s

这是(未发行的(1.0.2:

$ time ./insert
real    0m48.145s
user    0m36.638s
sys     0m6.692s

尽管有所改善,但我预计表现仍然低于Mariadb。这样做的部分原因是蟑螂的建筑。即使运行一个节点,它也会经历分布式执行所需的许多代码路径。部分原因是成熟。玛丽亚德(MariaDB(已经优化了多年,而我们才在cock虫工作的早期阶段。

最新更新