蟑螂是地球上適應性最強的物種之一。它們能在無氧環境下存活45分鐘,在沒有食物的情況下存活超過一個月。甚至就算身首異處也無法讓小強當場斃命——他們的身體沒了頭都還能活好幾天。 在像 Google,Amazon 和 Facebook 這樣的科技巨頭內部,掌握領先技術的工程師們也在讓他們自己的網站像小強一樣頑強。如果一臺服務器宕機,一個服務器集群宕機,或者整個數據中心電力中斷,那這些網站每一秒都在損失大量收入。 現在,一個開源開發者小組想讓每一家公司都能夠通過使用這種完全基于網絡的云計算系統來搭建如小強般頑強的網站。他們為項目命名為“CockroachDB”(“小強DB”),在宣傳中稱該項目是“具有超強生命力的數據庫”?;蛟S蟑螂被用在軟件命名中很違和,但聯合創始人 Spencer Kimball —— 一名前 Google 工程師 —— 則認為只有小強才能配得上他們的項目。 “這個名字代表了項目最重要的兩大特征:首先不用說,是生存性,其次是一種近乎自主的散布性”。 和很多其他同類型的開源項目一樣,CockroachDB 的靈感來自于一份 Google 的研究論文,這篇論文詳細地介紹了一種叫做“Spanner”的大型系統。Spanner 將允許 Google 將數據分布到全球上百個數據中心的上百萬臺服務器。系統的開發大約會耗時5年。 目前項目還處于 α 階段的開發,離實際應用還很遙遠。但 CockroachDB 小組也是現在唯一一個致力于實現 Spanner 系統的開發組。不少參與項目的開發者都曾就職于 Google,但沒有一個參與過 Spanner 項目。這其中,最出名的 photoshop 開源替代產品 GIMP 的的聯合創始人 Spencer Kimball 和 Peter Mattis 曾幫助開發 Google 的大型文件存儲系統,也就是 Colossus;Ben Darnell 曾參與過 Google Reader 開發,而 Andy Bonventre 則參與過 Chrome 和 Google Tasks 的開發。 CockroachDB 并沒有嘗試復制 Spanner 最不尋常的理念——用原子鐘來讓全球各地的數據中心時間同步。考慮到大多數線上應用都沒有達到 Google 的規模,他們或許不需要這樣的功能。Kimball 表示,這些公司真正需要的是是有一種穩定可靠的方式來讓數據自動復制和同步到各個數據中心的服務器里,這樣就算一個數據中心倒下了,應用還能正常運行,這也是 CockroachDB 的目標。 轉自:CockroachDB —— 像小強一樣堅不可摧的數據庫
1、 下載cockroachDB二進制文件
[root@ dcs-01 ~]# wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz2、 解壓文件
[root@dcs-01 ~]# tar xfz cockroach-latest.linux-amd64.tgz[root@dcs-01 ~]# cp cockroach-latest.linux-amd64/ cockroach /usr/local/bin/[root@dcs-01 ~]# scp /usr/local/bin/cockroach dev2:/usr/local/bin1、 啟動第1個節點
[root@dcs-01 ~]# cockroach start --insecure --host=dcs-01 --background --http-port=8081CockroachDB node starting at 2017-03-02 17:59:35.757366168 +0800 CSTbuild: CCL 9648163 @ 2017/02/13 19:27:00 (go1.7.5)admin: http://dcs-01:8081sql: postgresql://root@dcs-01:26257?sslmode=disablelogs: cockroach-data/logsstore[0]: path=cockroach-datastatus: initialized new clusterclusterID: 255b11fe-d801-4b06-9efc-db7baa3fccbfnodeID: 1說明: –store=指定存儲位置 –http-port=指定web端口。多節點集群部署時,在啟動命令中要加上–insecure –host=,否則其它節點會連接不到第1個節點。 配置安全連接參考:https://www.cockroachlabs.com/docs/secure-a-cluster.html
2、 啟動第2個節點
[root@dcs-02 ~]# cockroach start --insecure --host=dcs-02 --background --http-portCockroachDB node starting at 2017-03-02 18:06:44.519846508 +0800 CSTbuild: CCL 9648163 @ 2017/02/13 19:27:00 (go1.7.5)admin: http://dcs-02:8081sql: postgresql://root@dcs-02:26257?sslmode=disablelogs: /opt/cockroach-data/logsstore[0]: path=/opt/cockroach-datastatus: initialized new node, joined PRe-existing clusterclusterID: 255b11fe-d801-4b06-9efc-db7baa3fccbfnodeID: 2說明:啟動時要求各節點時間同步。 3、 啟動第3個節點
[root@dcs-03 ~]# cockroach start --insecure --host=dcs-03 --background --http-portCockroachDB node starting at 2017-03-02 18:07:59.945175342 +0800 CSTbuild: CCL 9648163 @ 2017/02/13 19:27:00 (go1.7.5)admin: http://dcs-03:8081sql: postgresql://root@dcs-03:26257?sslmode=disablelogs: /opt/cockroach-data/logsstore[0]: path=/opt/cockroach-datastatus: initialized new node, joined pre-existing clusterclusterID: 255b11fe-d801-4b06-9efc-db7baa3fccbfnodeID: 34、 sql命令行
[root@dcs-01 ~]# cockroach sql --url=postgresql://root@dcs-01:26257?sslmode=disab# Welcome to the cockroach SQL interface.# All statements must be terminated by a semicolon.# To exit: CTRL + D.root@dcs-01:26257/>1、 登錄http://:8081 進入web界面,查看集群運行狀態
2、 查看當前database信息
3、 查看權限信息
只是語法稍有區別(字段后綴和語句后綴均可,無任何差異,見下面例子); “on delete cascade”語法crdb不支持,刪除即可。 外鍵的第一種寫法(字段后綴寫法):
DROP TABLE IF EXISTS xxx.IDN_OAUTH1A_REQUEST_TOKEN;CREATE TABLE xxx.IDN_OAUTH1A_REQUEST_TOKEN ( REQUEST_TOKEN VARCHAR(512), REQUEST_TOKEN_SECRET VARCHAR(512), CONSUMER_KEY_ID INTEGER REFERENCES xxx.IDN_OAUTH_CONSUMER_APPS(ID), CALLBACK_URL VARCHAR(1024), SCOPE VARCHAR(2048), AUTHORIZED VARCHAR(128), OAUTH_VERIFIER VARCHAR(512), AUTHZ_USER VARCHAR(512), TENANT_ID INTEGER DEFAULT -1, PRIMARY KEY (REQUEST_TOKEN) );外鍵的第二種寫法(語句后綴寫法):
DROP TABLE IF EXISTS xxx.IDN_OAUTH2_access_TOKEN;CREATE TABLE xxx.IDN_OAUTH2_ACCESS_TOKEN ( TOKEN_ID VARCHAR (255), ACCESS_TOKEN VARCHAR(255), REFRESH_TOKEN VARCHAR(255), CONSUMER_KEY_ID INTEGER, AUTHZ_USER VARCHAR (100), TENANT_ID INTEGER, USER_DOMAIN VARCHAR(50), USER_TYPE VARCHAR (25), GRANT_TYPE VARCHAR (50), TIME_CREATED TIMESTAMP, REFRESH_TOKEN_TIME_CREATED TIMESTAMP, VALIDITY_PERIOD BIGINT, REFRESH_TOKEN_VALIDITY_PERIOD BIGINT, TOKEN_SCOPE_HASH VARCHAR(32), TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE', TOKEN_STATE_ID VARCHAR (128) DEFAULT 'NONE', SUBJECT_IDENTIFIER VARCHAR(255), PRIMARY KEY (TOKEN_ID), FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES xxx.IDN_OAUTH_CONSUMER_APPS(ID), CONSTRAINT CON_APP_KEY UNIQUE (CONSUMER_KEY_ID,AUTHZ_USER,TOKEN_ID,USER_DOMAIN,USER_TYPE,TOKEN_SCOPE_HASH, TOKEN_STATE,TOKEN_STATE_ID));SEQUENCE類型CRDB沒有,但CRDB使用SERIAL,更靈活。 例如原始語句:
CREATE TABLE IDN_OAUTH_CONSUMER_APPS ( ID INTEGER DEFAULT NEXTVAL('IDN_OAUTH_CONSUMER_APPS_PK_SEQ'), CONSUMER_KEY VARCHAR(255), CONSUMER_SECRET VARCHAR(512), USERNAME VARCHAR(255), TENANT_ID INTEGER DEFAULT 0, USER_DOMAIN VARCHAR(50), APP_NAME VARCHAR(255), OAUTH_VERSION VARCHAR(128), CALLBACK_URL VARCHAR(1024), GRANT_TYPES VARCHAR (1024), PKCE_MANDATORY CHAR(1) DEFAULT '0', PKCE_SUPPORT_PLAIN CHAR(1) DEFAULT '0', CONSTRAINT CONSUMER_KEY_CONSTRAINT UNIQUE (CONSUMER_KEY), PRIMARY KEY (ID));對于CRDB則改為:
CREATE TABLE xxx.IDN_OAUTH_CONSUMER_APPS ( ID SERIAL, CONSUMER_KEY VARCHAR(255), CONSUMER_SECRET VARCHAR(512), USERNAME VARCHAR(255), TENANT_ID INTEGER DEFAULT 0, USER_DOMAIN VARCHAR(50), APP_NAME VARCHAR(255), OAUTH_VERSION VARCHAR(128), CALLBACK_URL VARCHAR(1024), GRANT_TYPES VARCHAR (1024), PKCE_MANDATORY CHAR(1) DEFAULT '0', PKCE_SUPPORT_PLAIN CHAR(1) DEFAULT '0', CONSTRAINT CONSUMER_KEY_CONSTRAINT UNIQUE (CONSUMER_KEY), PRIMARY KEY (ID));DEFAULT NULL, 在CRDB中的處理是:不指定”DEFAULT”的修飾就會使用默認值指定為NULL。 DEFAULT ‘0’ 改為 DEFAULT False; DEFAULT ‘1’ 改為 DEFAULT True。
安裝參考:https://www.cockroachlabs.com/docs/manual-deployment.html 語法參考:https://www.cockroachlabs.com/docs/data-types.html
新聞熱點
疑難解答