MemSQL問世,查詢速度可比傳統數據庫高出30倍打賞

MemSQL問世,查詢速度可比傳統數據庫高出30倍
近日,Eric Frenkiel(前Facebook員工)和Nikita Shamgunov(前微軟SQL Server高級工程師)推出了MemSQL數據庫,該數據庫的目標旨在提高關系型數據庫的運行速度。

MemSQL通過將數據放置在內存中,并將SQL語句翻譯為C++,來達到查詢執行最優化。這使得MemSQL以難以置信的速度寫入和讀取數據。Frenkiel稱,MemSQL比磁盤型數據庫的執行速度快了30倍。

MemSQL提供了一個關系型接口,你可以將通常存儲在暫時媒介(緩存或鍵值存儲)中的數據進行統一,并連同現有數據直接放置到數據庫中。

除了速度快外,對于開發者來說,MemSQL的另一個優勢是可以與MySQL很好地結合。從本質上講,當磁盤中的MySQL數據需要更少的性能和更高的持久性時,MemSQL則扮演一個高性能內存層的角色。MemSQL使用一個SQL接口和MySQL API,這意味著開發者不必學習新的東西。

MemSQL項目主頁:http://memsql.com/
文檔:http://developers.memsql.com/docs/1b/

因為機子不夠折騰,就沒去親身體驗了,下面copy了網頁的體驗記錄。

點擊右上角的下載鏈接 ?http://www.memsql.com/#download ?,它會要求你提供email等信息,提交后返回一個license key和下載鏈接,我們下載developer版的即可。

- 安裝

$ tar -xzf memsqlbin_amd64.tar.gz
$ cd memsqlbin

- 啟動

$ ./check_system
$ ./memsqld

注:

- check_system會告訴系統是否滿足需求,比如內核版本,OS版本,64位 等等

- 啟動的時候,要加 -u root,否則會報fatal錯誤;如果你已經有mysql在運行,那么可能需要更改默認啟動端口3306為其他端口,比如 3307

./memsqld -u root --port 3307

- 如果你的RAM沒有8G,啟動的時候會有警告,但可以忽略。

- 測試

$ mysql -u root -h 127.0.0.1 -P 3306 --prompt="memsql> "

注: 這里-h不要使用localhost,用 127.0.0.1

進入命令行后就是標準的mysql客戶端了。

memsql> show databases;

+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| memsql ? ? ? ? ? ? |
+--------------------+

2 rows in set (0.00 sec)

建庫:

memsql> create database chris001;

Query OK, 0 rows affected (0.08 sec)

memsql> show databases;

+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| memsql ? ? ? ? ? ? |
| chris001 ? ? ? ? ? |
+--------------------+

3 rows in set (0.00 sec)

建表:

memsql> use chris001;

Database changed

memsql>

memsql> create table tab001 (id int primary key, name varchar(100), memo varchar(200),num int);

Query OK, 0 rows affected (6.71 sec)

memsql>

memsql>

memsql> show tables;

+--------------------+
| Tables_in_chris001 |
+--------------------+
| tab001 ? ? ? ? ? ? |
+--------------------+

1 row in set (0.00 sec)

memsql> desc tab001;

+-------+--------------+------+-----+---------+-------+
| Field | Type ? ? ? ? | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id ? ?| int(11) ? ? ?| NO ? | PRI | NULL ? ?| ? ? ? |
| name ?| varchar(100) | YES ?| ? ? | NULL ? ?| ? ? ? |
| memo ?| varchar(200) | YES ?| ? ? | NULL ? ?| ? ? ? |
| num ? | int(11) ? ? ?| YES ?| ? ? | NULL ? ?| ? ? ? |
+-------+--------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

插入數據后查詢:

memsql> insert into tab001 values (1,'chris','xxx',100);

Query OK, 1 row affected (1.82 sec)

memsql>

memsql>

memsql> select * from tab001;

+----+-------+------+------+
| id | name ?| memo | num ?|
+----+-------+------+------+
| ?1 | chris | xxx ?| ?100 |
+----+-------+------+------+

1 row in set (0.71 sec)

memsql> select * from tab001;

+----+-------+------+------+
| id | name ?| memo | num ?|
+----+-------+------+------+
| ?1 | chris | xxx ?| ?100 |
+----+-------+------+------+

1 row in set (0.00 sec)
memsql> select * from tab001;

+----+-------+------+------+
| id | name ?| memo | num ?|
+----+-------+------+------+
| ?1 | chris | xxx ?| ?100 |
+----+-------+------+------+

1 row in set (0.00 sec)

memsql> select * from tab001;

+----+-------+------+------+
| id | name ?| memo | num ?|
+----+-------+------+------+
| ?1 | chris | xxx ?| ?100 |
+----+-------+------+------+

1 row in set (0.00 sec)

memsql> select count(0) from tab001;

+----------+
| count(0) |
+----------+
| ? ? ? ?1 |
+----------+

1 row in set (0.63 sec)

memsql>

memsql> select count(0) from tab001;

+----------+
| count(0) |
+----------+
| ? ? ? ?1 |
+----------+

1 row in set (0.00 sec)

memsql> select count(0) from tab001;

+----------+
| count(0) |
+----------+
| ? ? ? ?1 |
+----------+

1 row in set (0.00 sec)

查詢的時候,服務端會打出日志:

136674795 2012-06-19 10:02:31 INFO: Table chris001.tab001 compiled in 6709 miliseconds (3185 miliseconds for header)

136678436 2012-06-19 10:02:31 INFO: Table chris001.tab001 row size 80 bytes (base overhead 32 bytes, column id 4 bytes, column name 12 bytes, column memo 12 bytes, column num 8 bytes)

186966810 2012-06-19 10:03:21 INFO: Query chris001.'insert into tab001 values (?,?,?,?)' compiled in 1825 miliseconds

194366714 2012-06-19 10:03:29 INFO: Query chris001.'select * from tab001' compiled in 712 miliseconds

283342115 2012-06-19 10:04:58 INFO: Query chris001.'select count(0) from tab001' compiled in 632 miliseconds

從以上測試我們看到,兩次查詢的首次和之后時間對比:

select * from tab001; ? ? ? ? ? ? ? ? (0.71 sec) ? ? ??(0.00 sec)

select count(0) from tab001; ? ??(0.63 sec) ? ? ? ?(0.00 sec)

從日志可以知道,首次查詢的耗時基本全都花在編譯上了 ?。

- 關閉

$ killall memsqld

4 總結?

引用 MemSQL 網站的介紹

MemSQL 寫道
MemSQL places data into memory and translates SQL into C++ for the utmost optimization in query execution. This enables MemSQL to write and read data at incredible speeds, and by offering a relational interface, you can unify the data you’d normally store in a short-lived medium—cache or key-value store—and place it directly into a database along with your existing data.

附: 軟硬件要求

支持的部署環境,必須 64位

Distribution Minimum Version Command

Amazon AMI 2012.03 sudo yum install gcc-c++
CentOS 6.0 sudo yum install gcc-c++
Debian 6.0 sudo apt-get install g++
Fedora 15 sudo yum install gcc-c++
OpenSUSE 11.3 sudo zypper install gcc-c++
Red Hat 6.1 sudo yum install gcc-c++
Ubuntu 10.04 sudo apt-get install g++

硬件:

  • Intel Core i3 or better processor
  • At least 8GB RAM
注:測試時RAM沒有8G會有警告,不影響使用。
MemSQL問世,查詢速度可比傳統數據庫高出30倍
文章《MemSQL問世,查詢速度可比傳統數據庫高出30倍》二維碼
  • 微信打賞
  • 支付寶打賞

已有21條評論

  1. 免費正版軟件

    完全看不懂,估計現在也用不上。

    2012-07-18 19:35 回復
  2. 免費正版軟件

    完全看不懂,估計現在也用不上。

    2012-07-18 19:35 回復
  3. 。。

    表示非常看不懂

    2012-07-09 18:02 回復
  4. Beautyleg

    這么牛逼?我20M數據庫的WP試試看。。秒殺google-perftools了?裝上之后WP直接就可以用了?512M可以不

    2012-07-02 22:21 回復
    • 窮小子

      閱題不認真啊。這個可是開發前期。個人認為今年不會有真正的應用出來。

      2012-07-02 22:28 回復
      • Beautyleg

        看了下可以裝上吧,和MYSQL一樣用,512M也可以用。。不過斷電就殘廢,這算自問自答么

        2012-07-02 22:37 回復
        • 窮小子

          算吧。你想試試可以先做個嘗試哈,使用體驗也分享我一份。呵呵

          2012-07-02 22:46 回復
  5. 慕羽

    比較難有太大的進展,因為這類技術要看服務器支撐。而現在來看,大多數服務器最緊張的資源恰好是內存。。。。所以。。。

    2012-07-02 11:40 回復
  6. Always.Life

    數據庫,我是盲區…

    2012-06-23 13:16 回復
  7. 雨帆

    在OSChina上看到了這個開源項目,暫時觀望中,畢竟沒有市場的東西是不長久的。

    2012-06-22 18:49 回復
    • 窮小子

      難說啊,看情況是可以作為輔助程序的。

      2012-06-22 18:51 回復
      • 雨帆

        企業級的11g 和 DB2已經夠用了。真的。

        2012-06-22 18:58 回復
        • 窮小子

          我是說這個速度,現在我們oracle做項目的時候有些數據量大的項目就很受速度影響。

          2012-06-22 19:01 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖