本文會介紹Apache Ignite的C++ API(稱爲Ignite C++),主要面向C/C++開發者。數據庫
由於Ignite是一個分佈式平臺,因此開始就要先啓動一個節點,這方面若是使用ignite::Ignition
類是很是簡單的:apache
好了,在C++環境中已經使用默認的配置啓動了第一個Ignite節點!其中Ignite
類是訪問集羣的主要入口點。緩存
暴露數據操做API的主要Ignite C++組件是ignite::cache::Cache<K,V>
。它包含了基本的數據操做方法集。因爲緩存本質上是做爲分佈式哈希表的接口,所以基本上能夠像處理簡單容器(map
或者unordered_map
)那樣與它進行交互。網絡
Ignite主要是用Java開發的,Ignite組件的實現也使用了不少Java的特性,好比,對象的序列化/反序列化就用在了磁盤存儲和對象的網絡傳輸上。分佈式
在Ignite C++中,這個特性經過ignite::binary::BinaryType<T>
模板限定來實現:,無論是普通的客戶端仍是瘦客戶端,都是用的這個方式,對於上面提到的Person
類,大體以下:測試
這裏除了序列化/反序列化方法BinaryType<Person>::Write
和BinaryType<Person>::Read
外,還有其它的一些方法,它們用於向平臺說明,如何在其它語言中處理自定義C++類型,尤爲是在Java中,下面會詳細探討這些方法:指針
GetTypeName()
:返回類型名。該類型名在全部使用這個類型的平臺中都應該是一致的,若是隻在Ignite C++中使用這個類型,那麼這個命名就沒有強制要求;GetTypeId()
:返回跨平臺的惟一類型ID。要想在全部平臺上都有正確的行爲,那麼全部的實現都必須使用相同的計算方法。GetBinaryStringHashCode(TypeName)
在任意平臺的默認實現,都會返回相同的類型ID,所以這種實現方式在任意平臺上都能保證該類型的正確使用;GetFieldId()
:返回字段名的惟一ID。不過要保證跨平臺,要使用GetBinaryStringHashCode()
方法;IsNull()
:檢查類實例是否爲空,該方法用於NULL值的正確序列化,對於類實例用處不大,不過若是用戶想處理智能指針以及定義好比BinaryType< std::unique_ptr<Person>>
這樣的限定,則可能會比較方便;GetNull()
:若是要反序列化NULL值,會調用它。關於IsNull()
的說法,也適用於GetNull()
。與傳統數據庫相似,能夠將緩存視爲數據庫模式,而且該模式只有一個表名爲類型名的表。除了緩存模式以外,還有一個名爲PUBLIC
的公共模式,在該模式中,可使用標準DDL指令(如CREATE TABLE
、DROP TABLE
等)建立/刪除任意數量的表。一般,若是隻想將Ignite用做分佈式數據庫,則能夠經過ODBC/JDBC鏈接到PUBLIC
模式。code
Ignite支持完整的SQL查詢,包括DML和DDL。經過MVCC,SQL事務也是支持的,不過還處於測試階段。對象
要經過SQL處理緩存數據,必須在緩存配置中顯式指定將在SQL查詢中使用哪些對象字段。配置在XML文件中進行了描述,以後將在節點啓動時指定配置文件的路徑:接口
該配置會由Java來解析,所以其中的基本類型在Java中也要指定,配置文件建好以後,就能夠啓動一個節點,獲取一個緩存實例,進而處理SQL:
這時候就能夠執行INSERT、UPDATE、CREATE TABLE以及其它查詢了,固然,跨緩存查詢也是支持的。不過這種狀況下要注意,須要給查詢中的緩存名上加上引號,做爲模式名,好比這樣不行:
要這樣寫:
好了,暫時就寫這麼多,Apache Ignite功能強大,C++ API目前也仍在全力開發中,因此請繼續關注將來的更新。