文章目錄
使用 C# 存取 Riak
之前筆記 使用 C# 存取 Cassandra 提到想要將 log 存放至 NoSQL 中而正在嘗試某幾套 NoSQL,現在就來看看 Riak 的使用吧
基本環境說明
在 Windows 上使用 docker 建立 linux 版本 Riak,接著使用 C# 連線至 Riak 執行基本 CRUD
- Windows 10 Version 1803 (OS Build 17134.590)
- Docker Community 18.09.2
- Bogus 25.0.4
- Riak 2.1.4
RiakClient 2.5.0
RiakClient 目前還未推出 .NETStandard 版本
建立 Riak instance
Riak 有 Riak KV 與 Riak TS 兩種
Riak KV
:為一般 NoSQL databaseRiak TS
:則是為基於 Riak KV 核心功能,針對 Time Series 資料優化的產品
透過 docker 僅建立單一 local Riakdb KV instance
docker run -d -p 8087:8087 -p 8098:8098 basho/riak-kv
- 8087 是 Protocol Buffers 使用的
- 8098 則是 HTTP 使用
使用方式
透過 http://127.0.0.1:8098/riak/status 來確認是否有正確安裝及啟動
設定 C# 連線 config
<configuration> <configSections> <section name="riakConfig" type="RiakClient.Config.RiakClusterConfiguration, RiakClient" /> </configSections> <riakConfig nodePollTime="5000" defaultRetryWaitTime="200" defaultRetryCount="3"> <nodes> <node name="dev1" hostAddress="localhost" poolSize="20" /> </nodes> </riakConfig> </configuration>
安裝
RiakClient
NuGet 套件 > 本次測試使用 RiakClient 版本為2.5.0
Package Manager
Install-Package RiakClient
.NET CLI
dotnet add package RiakClient
實際存取 Riak
Insert
//準備 insert 用假資料 var _user = GetFakeUserData(); //從 config 中讀取資料 var cluster = RiakCluster.FromConfig("riakConfig"); //建立連線 var client = cluster.CreateClient(); //準備 RiakObject :指定 UserId 為 key 且 bucket 為 users var o = new RiakObject("users", _user.UserId.ToString(), _user); //將資料寫入 riak client.Put(o);
Select
//從 config 中讀取資料 var cluster = RiakCluster.FromConfig("riakConfig"); //建立連線 var client = cluster.CreateClient(); //以 key 來搜尋 users bucket var result = client.Get("users", "40bd4101-4bd5-0d39-3f92-a0575a9670f0"); //如果成功 if (result.IsSuccess) { //將內容轉為 User 物件 result.Value.GetObject<User>(); }
Update
User user = new User(); //以 key 來搜尋 users bucket var result = client.Get("users", "40bd4101-4bd5-0d39-3f92-a0575a9670f0"); //如果成功 if (result.IsSuccess) { //將內容轉為 User 物件 user = result.Value.GetObject<User>(); //將名稱改為 "Yowko" user.Name = "Yowko"; //準備 RiakObject :指定 UserId 為 key 且 bucket 為 users var o = new RiakObject("users", user.UserId.ToString(), user); //更新資料 var updateResult = client.Put(o); }
Delete
//以 key 刪除 users bucket 資料 var deleteResult = client.Delete("users", "40bd4101-4bd5-0d39-3f92-a0575a9670f0");
心得
優點:
- Riak 有支援 Protocol Buffers 猜測在傳輸的效率上應該不差
缺點:
- 在連線設定上,一定要透過 configSections 來設定,使用上便利性稍差;
- API 只能透過 key 來搜尋及刪除,會大幅限縮使用情境,
- 目前仍無 .NETStandard 版本,對於 .Net Core 及跨平台需求的使用者直接就出局了
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。