SequoiaDB是一款分佈式文檔型數據庫,是國內爲數很少擁有自主知識產權的開源數據庫。目前SequoiaDB已經在GitHub上開源。數據庫
SequoiaDB主要的功能特色是支持分佈式事務、2003標準SQL、同時提供文檔存儲引擎和塊存儲引擎、與大數據產品有良好的整合。併發
2.1 API開發接口框架
SequoiaDB的API開發接口,是功能最全的開發接口,目前已經支持C、C++、Java、Scala、Python、C#、Perl、Javascript多種開發語言。運維
SequoiaDB的API支持對數據庫作全部操做,包括:增刪查改、數據庫擴容、數據遷移、數據庫節點啓停、增減集合空間和集合、監控數據庫狀態信息等。分佈式
SequoiaDB的API開發風格偏向對象式操做,以Java驅動爲例,向數據庫寫入一條記錄,代碼以下。函數
圖 1高併發
可是C語言的API驅動因爲開發語言的限制,開發方式仍是遵循面向過程式開發,如下是C語言驅動向數據庫寫入一條記錄的代碼。oop
圖 2性能
SequoiaDB的安裝包已經包含了大部分經常使用的API驅動,用戶能夠在安裝數據庫後直接使用。用戶也能夠經過SequoiaDB官網下載各個開發語言的驅動包。學習
2.2 大數據開發接口
SequoiaDB和不少大數據產品都有較好的整合,例如:Hadoop MapReduce、Hive、Spark RDD、SparkSQL,用戶能夠經過擴展大數據產品的存儲層,使得存儲在SequoiaDB的數據爲大數據提供源數據。
簡而言之,SequoiaDB和大數據產品的關係就是存儲和計算框架的關係。
SequoiaDB和各種大數據產品的對接方式都是經過配置大數據產品的鏈接方式進行,例如SequoiaDB和Spark的對接,就是對Spark的spark-env.sh 配置文件增長SPARK_CLASSPATH參數。
SPARK_CLASSPATH="/opt/sequoiadb/sequoiadb-driver-SNAPSHOT.jar:/opt/sequoiadb/spark-sequoiadb-SNAPSHOT.jar"
當大數據產品和SequoiaDB完成了對接,那麼後續的使用和開發流程與使用原生的HDFS或者本地文件沒有本質區別。
2.3 SQL開發接口
SequoiaDB的SQL開發接口包含兩種方式,一種是社區版的基於PostgreSQL擴展的SQL引擎,另一種是由SequoiaDB公司提供的SequoiaSQL產品,二者的SQL語法都使用PostgreSQL的SQL語法,支持2003 SQL規範,而且都支持存儲過程、事務功能和JDBC服務。
可是二者在複雜SQL關聯實現機制上有所不一樣,社區版本的PostgreSQL僅支持Hash Join關聯方式,而SequoiaSQL同時支持NL Join和Hash Join兩種關聯方式,可以更好適用在複雜的SQL關聯場景。
開發者如何選擇SequoiaDB開發接口
3.1 實時數據處理
在實時處理場景,一般都是對數據庫作高併發的增、刪、查、改操做,此時須要數據庫的索引功能支持,因此開發者能夠採用API接口或者是SQL接口,不建議使用大數據相關開發接口作應用開發。
另外一方面,實時數據處理也有多是由流式處理引擎+數據庫共同處理,因此開發者在開發流式處理程序時,須要結合SequoiaDB的驅動程序進行開發,例如Spark Streaming的開發程序一般使用Scala語言和Java語言,若是是Store流處理引擎,開發者更可能是選擇Java做爲開發語言。
3.2 跑批數據處理
若是開發者要使用SequoiaDB作跑批類數據處理,應該選擇SequoiaDB與大數據產品相結合的技術方案。
若是發者但願使用SQL命令作數據處理,那麼能夠考慮採用SparkSQL或者Hive作開發。若是開發者須要處理的業務場景很是複雜,普通SQL很難知足開發需求,那麼能夠考慮採用MapReduce或者RDD開發接口,由開發人員直接根據業務邏輯使用程序實現相應的數據處理流程。
3.3 API or SQL
開發者在選擇SequoiaDB的開發方式時,一般出現選擇困難症,到底是選擇使用API仍是SQL。其實這個問題沒有絕對的答案,主要要看開發者將要實現的場景。
首先開發者應該瞭解兩種接口各自的優缺點。
API 優勢
1. 性能優,全部的開發接口中性能最高的
2. 支持操做塊存儲
3. 支持數據庫全部操做接口,包括監控、啓停節點等數據庫運維接口
API 缺點
1. 開發方式與傳統的JDBC不一樣,須要開發者適應
2. 對多表關聯支持很差,須要開發者使用程序完成表關聯操做
3. 缺少數據處理函數,大部分須要用戶使用程序實現
SQL 優勢
1. 符合傳統開發者習慣,學習成本低
2. 提供多表關聯功能
3. 提供豐富數據處理函數,開發相對便捷
4. 作原有系統程序遷移,開發成本低
SQL 缺點
1. 性能相對API有所降低,降低幅度大概在10%-15%
2. 對全表作count、group by、sort等統計操做性能相對較差
3. 不支持直接操做SequoiaDB的塊存儲
4. 開發者須要同時維護SequoiaDB中的集合和SQL引擎中的table信息
5. 沒法調用數據庫的運維相關命令
因此根據以上特性,開發者能夠在如下場景選擇API進行系統開發
(1) 最求性能最大化
(2) 新系統開發
(3) 業務場景相對簡單的場景使用API
(4) 須要使用塊存儲的場景
在如下場景選擇SQL進行系統開發
(1) 須要使用複雜關聯查詢
(2) 須要使用多種數據處理函數
(3) 對原有系統進行應用遷移
(4) 系統不會常常對全表作count、group by和sort這類統計操做
因爲SequoiaDB的開發接口相對過去傳統的關係型數據庫多,因此本文經過對SequoiaDB各類接口的技術特性向廣大開發者進行介紹,但願可以讓開發者更加了解SequoiaDB的開發特性,而後能夠在不一樣的開發場景中選擇適合的接口進行開發,以得到性能最優的效果。