巨杉數據庫SequoiaDB Python開發基礎
巨杉數據庫是一款金融級分布式關系型數據庫,2017、2018連續兩年入選Gartner數據庫報告。
巨杉堅持產品從零開始自主研發,為用戶提供安全可靠、性能卓越的海量數據存儲管理、高並發實時處理、分布式計算以及實時流處理等企業級數據處理解決方案。
目前在金融、政府、電信多個行業得到了廣泛應用,並在超過50家大中型銀行的核心生產系統應用。
本節介紹使用Python運行SequoiaDB。首先安裝SequoiaDB,安裝信息請查看安裝章節。
這裏介紹如何使用Python客戶端驅動接口編寫使用SequoiaDB數據庫的程序。為了簡單起見,下面的示例不全是完整的代碼,只起示例性作用。可到SequoiadDB安裝路徑下samples/Python下獲取相應的完整的代碼。更多查看Python API
Note:
在Python中構造BSON時默認使用dict,dict的字段是無序的。
如果要求BSON中的字段順序與輸入順序一致(例如,創建索引時索引鍵的定義),請使用collections.OrderedDict。
數據庫操作
-
數據庫連接(Connecting)
以下是connect.py演示如何連接到數據庫。
- import pysequoiadb
- from pysequoiadb import client
- # connect to local db, using default args value.
- host = ‘localhost‘
- port = 11810
- # user= ‘‘, password= ‘‘
- db = client(host, port)
- # if no error occurs, connect to specified server successfully
- print ‘Connect success‘
- db.disconnect()
在Linux下,可以直接運行python解釋執行connect.py。
Note:
本例程連接到本地數據庫的服務端口11810,使用的是空的用戶名和密碼。用戶需要根據自己的實際情況配置參數。譬如,將上述代碼中的
db = client()
db = client(‘192.168.10.188‘, 11810)
。當數據庫已經創建用戶時,應該使用正確的用戶及密碼連接到數據庫,否則連接失敗。 -
創建集合空間和集合
以下創建了一個名字為“foo”的集合空間和一個名字為“bar”的集合,集合空間內的集合的數據頁大小為16k。可根據實際情況選擇不同大小的數據頁。創建集合後,可對集合做增刪改查等操作。
- # connect to db
- db = client("localhost", 11810)
- # create collection space
- cs_name = ‘foo‘
- cs = db.create_collection_space(cs_name)
- cl_name = ‘bar‘
- cl = cs.create_collection(cl_name)
-
插入數據(insert)
- # creat dict object
- record = {"name":"Tom", "age":24}
- oid = cl.insert ( record ) ;
record為輸入參數,為要插入的數據。dict對象將會被轉換成bson插入到集合中。oid 是插入該記錄時,返回的bson結構的objectid。
-
查詢(query)
- import pysequoiadb
- from pysequoiadb import client
- from pysequoiadb.error import SDBEndOfCursor
- cr = cl.query()
- while True:
- try:
- record = cr.next()
- print(record)
- except SDBEndOfCursor:
- break
- finally:
- cr.close()
查詢操作需要一個遊標對象存放查詢的結果到本地。要獲得查詢的結果需要使用遊標操作。本例使用了遊標操作的next接口,表示從查詢結果中取到一條記錄。此示例中沒有設置查詢條件,篩選條件,排序情況,及僅使用默認索引。
-
索引(index)
- index_name = "index_name"
- idx = OrderedDict([(‘name‘, 1), (‘age‘, -1)])
- cl.create_index ( idx, index_name, False, False ) ;
集合對象collection中創建一個以“name”為升序,“age”為降序的索引。
-
更新(update)
- rule = {"$set":{ "age":19}}
- print rule
- cl.update( rule )
在集合對象 ollection中更新了記錄。實例中沒有指定數據匹配規則,所以此示例將更新集合中所有的集合。
集群操作
分區組操作包括創建分區組(client::creat_replica_group),得到分區組實例(client:: get_replica_group_by_name 和 client:: get_replica_group_by_id),啟動分區組所有節點(replicagroup::start),停止分區組所有節點(replicagroup::stop)等。
-
分區組操作
以下僅作為示例,真正的應用應包括錯誤檢測等。
- rg = db.create_replica_group ("group1")
- config = {}
- rg.create_node (‘ubuntu-test-03‘, ‘20000‘, "/opt/sequoiadb/database/20000", config)
- rg.start ()
創建名為group1的數據組。創建節點時,定義一個空的map對象config表示該節點沒有更多的配置內容。
-
節點操作
節點操作包括創建節點(replicagroup::create_node),獲取主節點(replicagroup::get_master),獲取備節點(replicagroup::get_slave),啟動節點(replicanode::start),停止節點(replicanode::stop)等。
以下為數據節點操作示例性的例子。真正的應用應包括錯誤檢測等。
- # 獲取數據組group
- rg = db.get_replica_group_by_name("group1")
- # 獲取數據主節點
- master = rg.get_master() ;
- # 獲取數據備節點
- slave = rg.get_slave() ;
巨杉數據庫SequoiaDB Python開發基礎