近期開始學習分佈式數據庫的一些內容,也對巨杉數據庫進行了實際使用測試,將個人學習的已經總結寫成博客分享給大家。
一:圖形化操作(SAC界面):
瀏覽器中地址欄輸入: IP:8000 例如:10.17.4.170:8000
用戶名/密碼爲 : admin / admin
Note:
1. 圖形化中可以進行集合空間、集合信息查看,集合數據量查看、集合中數據的查看等。
2. SAC監控和部署中採集到的內存使用情況採集包含Cache,有時候看起來會內存佔用比較高。
3. 數據庫安裝後默認沒有用戶名密碼,即無鑑權,創建用戶名密碼之後開啓鑑權。開啓鑑權之後需要在SAC中配置用戶的用戶名密碼 ,點擊 “部署” - “鑑權” 輸入用戶名密碼即可,位置如下圖所示:
二:命令行操作(SDB Shell)
1.切換到sdbadmin用戶(sdbadmin用戶密碼爲sdbadmin)
$ su - sdbadmin
2.進入SDB Shell
[sdbadmin@sdbserver] $ sdb
3.創建sdb連接 (SDB Shell中語法使用JavaScript的語法)
> var db = new Sdb() //該語句連接的是localhost 11810 節點
4.如果連接其他機器的sdb,或數據庫有用戶名密碼,按照如下方式連接
var db = new Sdb("197.3.84.200",11810,"username","password");
以下操作均在sdb shell創建sdb連接(第3部)執行之後再執行。
- 創建域
域(Domain)是由若干個複製組(ReplicaGroup)組成的邏輯單元。每個域都可以根據定義好的策略自動管理所屬數據,如數據切片和數據隔離等。
語法: db.createDomain( , , [options] )
db.createDomain("domainName",['group','group2','group3'])
創建域官網文檔: http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190774-edition_id-0
- 創建集合空間
集合空間(CollectionSpace,簡稱cs),合空間(CollectionSpace)是數據庫中存放集合的物理對象。任何一個集合必須屬於一個且僅一個集合空間。
語法:db.createCS( , [options] )
db.createCS("csName",{ PageSize: 4096, Domain: "mydomain" })
創建集合空間官網文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190773-edition_id-0
- 創建集合
集合(Collection)是數據庫中存放文檔的邏輯對象。任何一條文檔必須屬於一個且僅一個集合。
語法:db.collectionspace.createCL(,[options])
db.csName.createCL("clName",{ ShardingKey:{ age: 1 }, ShardingType: "hash", Partition: 4096, ReplSize: 1 } )
創建集合參數較多,容易出現問題,請詳細參考官網文檔:
http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190821-edition_id-0
- 查看所有集合空間 | 指定集合空間
在命令行查看集合空間,需要通過sdb的snapshot(快照),集合空間的快照標識: SDB_SNAP_COLLECTIONSPACES
語法:db.snapshot( 快照標識 )
db.snapshot(SDB_SNAP_COLLECTIONSPACES);
//SDB_SNAP_COLLECTIONSPACES 的快照編號爲5 也可用以下命令查詢,效果與上面命令相同
db.snapshot(5);
//支持JSON格式的條件查詢,例如根據集合空間名字查詢
db.snapshot(5,{"Name":"CollectionSpaceName"})
集合空間快照官網文檔:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1479173716-edition_id-302
- 查看所有集合 | 指定集合
在命令行查看集合空間,需要通過sdb的snapshot(快照),集合的快照標識: SDB_SNAP_COLLECTIONS
語法:db.snapshot(SDB_SNAP_COLLECTIONS)
db.snapshot(SDB_SNAP_COLLECTIONS);
SDB_SNAP_COLLECTIONS 的快照編號爲4 也可用以下命令查詢,效果與上面命令相同
db.snapshot(4);
支持JSON格式的條件查詢,例如根據集合空間名字查詢
db.snapshot(4,{"Name":"csName.clName"})
集合快照官網文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190628-edition_id-0
- 查詢集合下的數據量 (可根據條件進行篩選)
(查詢的匹配符可參考巨杉文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1464770442-edition_id-0)
db.csName.clName.count();
//統計符合條件 name 字段的值爲”Tom”且 age 字段的值大於25的記錄數
db.foo.bar.count( { name: "Tom", age: { $gt: 25 } } )
查詢操作官方文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190828-edition_id-0
- 查詢集合下的一條記錄
db.csName.clName.findOne()
- 查詢集合下的記錄 | 條件查詢
(查詢的匹配符可參考巨杉文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1464770442-edition_id-0)
//查詢集合下的所有記錄
> db.csName.clName.find()
//根據條件查詢某一條記錄
> db.csName.clName.find({{ age: { $gt: 25 }, name: "Tom" }})
查詢操作官方文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190835-edition_id-0
- 查看集合下所有的lob數據
語法:db.collectionspace.collection.listLobs()
db.foo.bar.listLobs()
查看官方文檔地址:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190841-edition_id-302
- 讀取集合下的一條Lob數據
語法:db.collectionspace.collection.getLob(,,[forced])
//將標示符爲 5435e7b69487faa663000897 的 lob 寫入本地 /opt/newlob 文件
> db.foo.bar.getLob( '5435e7b69487faa663000897', '/opt/newlob' )
- 刪除集合空間
> db.dropCS("csName");
- 刪除集合
> db.csName.dropCL("clName");
- 刪除集合下的數據 (可根據條件刪除)
(刪除的匹配符可參考巨杉文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1464770442-edition_id-0)
> db.cs.cl.remove();
刪除符合條件 age 字段值大於等於20的記錄
> db.foo.bar.remove( { age: { $gte: 20 } } )
刪除操作官方文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190843-edition_id-0
- 創建索引
語法:db.collectionspace.collection.createIndex(,,[isUnique],[enforced],[sortBufferSize])
//集合 bar 下爲字段名 age 創建名爲 ageIndex 的唯一索引,記錄按 age 字段值的升序排序。
> db.foo.bar.createIndex( "ageIndex", { age: 1 }, true )
//集合 bar 創建唯一索引,並且索引字段不允許爲 null 或者不存在 。
>db.foo.bar.createIndex( "ab", { a: 1, b: 1 }, { Unique: true, NotNull: true } )
創建索引操作可選參數較多,建議參考官方文檔索引創建一節:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190830-edition_id-0
- 刪除索引
語法:db.collectionspace.collection.dropIndex()
//刪除集合 bar 下名爲 ageIndex 的索引,假設 ageIndex 已存在。
> db.foo.bar.dropIndex("ageIndex")
三:通過SequoiaSQL-PostgreSQL操作巨杉中的數據
SequoiaSQL-PostgreSQL是巨杉的sql實例,底層使用SequoiDB,通過PostgreSQL創建外表的方式操作巨杉引擎中的數據。目的是使用戶通過sql的方式來進行數據操作。
Note:
*以下操作建立在數據庫服務器安裝SequoiaSQL-PostgreSQL實例並創建了實例(inst),並加載且配置了SequoiaD連接
創建實例可參考官方文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1519628019-edition_id-302
加載並配置連接可參考官方文檔:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190715-edition_id-302*
1.切換到sdbadmin用戶下
[root@sdbserver]$ su - sdbadmin
2.在PostgreSQL中創建數據庫
// postgresql安裝路徑/bin/sdb_sql_ctl createdb 數據庫名 實例名 (實例需要已經開啓)
[sdbadmin@sdbserver]$ /opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb pgdb myinst
3.連接PostgreSQL
//psql -p 端口 數據庫
[sdbadmin@sdbserver]$ psql -p 5432 pgdb
4.創建PostgreSQL中的外表關聯SequoiaDB引擎
pgdb=# create foreign table test (name text, id numeric)
server sdb_server
options ( collectionspace 'foo', collection 'bar', decimal 'on' ) ;
具體參數可參照官方文檔:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190715-edition_id-302
5.創建外表之後即可通過sql的方式操作外表訪問數據
刪除外表
pgdb=# drop foreign table foreignTableName;
Note:
1. 創建外表是指定字段類型請嚴格按照對照表對應,數據對應錯誤會導致在postgresql端查詢外表,數據類型對應錯誤的字段查詢不到數據。數據類型對應表可參照官方文檔:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190715-edition_id-302