GridDBの性能
Installation
Java
GridDBの接続
Properties props = new Properties();
props.setProperty("notificationMember", "127.0.0.1:10001");
props.setProperty("clusterName", "myCluster");
props.setProperty("user", "admin");
props.setProperty("password", "admin");
GridStore store = GridStoreFactory.getInstance().getGridStore(props);
時系列コンテナーの作り方
static class Point {
@RowKey Date timestamp;
boolean active;
double voltage;
}
TimeSeries<Point> ts = store.putTimeSeries("point01", Point.class);
Point point = new Point();
point.active = false;
point.voltage = 100;
// Store the time-series element (GridStore sets its timestamp)
ts.append(point);
Date now = TimestampUtils.current();
Date before = TimestampUtils.add(now, -6, TimeUnit.HOUR);
RowSet<Point> rs = ts.query(before, now).fetch();
while (rs.hasNext()) {
point = rs.next();
System.out.println(
"Time=" + TimestampUtils.format(point.timestamp) +
" Active=" + point.active +
" Voltage=" + point.voltage);
}
JDBC
GridDBの接続
String notificationMember = "127.0.0.1:20001";
String clusterName = "myCluster";
String databaseName = "public";
String username = "admin";
String password = "admin";
String encodeClusterName = URLEncoder.encode(clusterName, "UTF-8");
String encodeDatabaseName = URLEncoder.encode(databaseName, "UTF-8");
String jdbcUrl = "jdbc:gs://" + notificationMember + "/";
jdbcUrl = jdbcUrl + encodeClusterName + "/" + encodeDatabaseName;
Properties prop = new Properties();
prop.setProperty("user", username);
prop.setProperty("password", password);
System.out.println(jdbcUrl);
con = DriverManager.getConnection(jdbcUrl, prop);
時系列コンテナーの作り方
String str = "CREATE TABLE device";
str = str+"(ts TIMESTAMP PRIMARY KEY, co DOUBLE,";
str = str+"humidity DOUBLE,light BOOL,lpg DOUBLE,motion BOOL,smoke DOUBLE,temp DOUBLE)";
str = str+" USING TIMESERIES WITH (expiration_type='PARTITION',";
str = str+" expiration_time=90,expiration_time_unit='DAY')";
str = str+" PARTITION BY RANGE (ts) EVERY (60, DAY) SUBPARTITION BY HASH (ts) SUBPARTITIONS 64;";
Statement stmt = con.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS device");
stmt.executeUpdate(str);
System.out.println("Successfully created device");
con.close();
Python
GridDBの接続
import griddb_python as griddb
factory = griddb.StoreFactory.get_instance()
DB_HOST = "127.0.0.1:10001"
DB_CLUSTER = "myCluster"
DB_USER = "admin"
DB_PASS = "admin"
try:
# (1) Connect to GridDB
# Fixed list method
gridstore = factory.get_store(
notification_member=DB_HOST,
cluster_name=DB_CLUSTER,
username=DB_USER,
password=DB_PASS)
print("Succesfully connected to GridDB!")
except griddb.GSException as e:
for i in range(e.get_error_stack_size()):
print("[", i, "]")
print(e.get_error_code(i))
print(e.get_location(i))
print(e.get_message(i))
時系列コンテナーの作り方
conInfo = griddb.ContainerInfo(name="device",
column_info_list=[["ts", griddb.Type.TIMESTAMP],
["co", griddb.Type.DOUBLE],
["humidity", griddb.Type.DOUBLE],
["light", griddb.Type.BOOL],
["lpg", griddb.Type.DOUBLE],
["motion", griddb.Type.BOOL],
["smoke", griddb.Type.DOUBLE],
["temperature", griddb.Type.DOUBLE]],
type=griddb.ContainerType.TIME_SERIES)
# Create the container
ts = gridstore.put_container(conInfo)
print(conInfo.name, "container succesfully created")
device = gridstore.get_container("device")
if device == None:
print("ERROR Container not found.")
# Put a single row
device.put(["2022-09-21T12:00:01.234Z", 0.003551, 50.0,
False, 0.00754352, False, 0.0232432, 21.6])
print("Single row successfully inserted!")
node.js
GridDBの接続
const griddb = require('griddb-node-api');
var factory = griddb.StoreFactory.getInstance();
var store = factory.getStore({
"notificationMember": "127.0.0.1:10001",
"clusterName": "myCluster",
"username": "admin",
"password": "admin"
});
時系列コンテナーの作り方
var conInfo = new griddb.ContainerInfo({
'name': "point01",
'columnInfoList': [
["timestamp", griddb.Type.TIMESTAMP],
["active", griddb.Type.BOOL],
["voltage", griddb.Type.DOUBLE]
],
'type': griddb.ContainerType.TIME_SERIES, 'rowKey': true
});
var time_series;
store.putContainer(conInfo, false)
.then(ts => {
time_series = ts;
return ts.put([new Date(), false, 100]);
})
.then(() => {
let str = "select * where timestamp > TIMESTAMPADD(HOUR, NOW(), -6)"
query = time_series.query(str);
return query.fetch();
})
.then(rowset => {
while (rowset.hasNext()) {
var row = rowset.next();
console.log("Time =", row[0],
"Active =", row[1].toString(),
"Voltage =", row[2]);
}
})
.catch(err => {
console.log(err.message);
});
Go
GridDBの接続
import griddb "github.com/griddb/go_client"
factory := griddb.StoreFactoryGetInstance()
// Get GridStore object
gridstore, err := factory.GetStore(map[string]interface{}{
"notification_member": "127.0.0.1:10001",
"cluster_name": "myCluster",
"username": "admin",
"password": "admin"})
if err != nil {
fmt.Println(err)
panic("err get store")
}
時系列コンテナーの作り方
conInfo, err := griddb.CreateContainerInfo(map[string]interface{}{
"name": "todo",
"column_info_list": [][]interface{}{
{"id", griddb.TYPE_INTEGER},
{"title", griddb.TYPE_STRING},
{"completed", griddb.TYPE_BOOL}},
"type": griddb.CONTAINER_COLLECTION,
"row_key": true})
if err != nil {
fmt.Println("Create containerInfo failed, err:", err)
panic("err CreateContainerInfo")
}
_, e := gridstore.PutContainer(conInfo)
if e != nil {
fmt.Println("put container failed, err:", e)
panic("err PutContainer")
}
Web API
GridDBの接続
指定したポート (デフォルト: 8080) に HTTP リクエストを流してください。
コレクションコンテナーの作り方
# http://[host]:[port]/griddb/v2/[clusterName]/dbs/public/containers
$ curl -X POST --basic -u admin:admin -H "Content-type:application/json" http://127.0.0.1:8080/griddb/v2/myCluster/dbs/public/containers -d
'{
"container_name": "test",
"container_type": "COLLECTION",
"rowkey": true,
"columns": [
{
"name": "col1",
"type": "STRING",
"index": [
"TREE"
]
},
{
"name": "col2",
"type": "INTEGER"
},
{
"name": "col3",
"type": "BOOL"
}
]
}'
# Append a Row of Data
# http://[host]:[port]/griddb/v2/[clusterName]/dbs/public/containers/[containerName]/rows
$ curl -X PUT --basic -u admin:admin -H "Content-type:application/json" http://127.0.0.1:8080/griddb/v2/myCluster/dbs/public/containers -d
'[["value", 1, true]]'
Ubuntu
apt-getでインストール
- sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
- wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
- sudo apt update
- sudo apt install griddb-meta
- sudo systemctl start gridstore
Windows (WSL)
まず Windows マシンに WSL をインストールしてください。
- 起動された (管理者権限の) Windows PowerShell またはコマンド プロンプトを開いてください。
- 「wsl --install」と入力してください。
- WSL の詳細な手順についてはこちら here
そのあと通常の Ubuntu の手順を実行してください。
- sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
- wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
- sudo apt update
- sudo apt install griddb-meta
- sudo systemctl start gridstore
Docker
Docker のインストール後
- docker network create griddb-net
- docker pull griddbnet/griddb
- docker run --network griddb-net --name griddb-server -d -t griddbnet/griddb
ChromeOS
まず Linux を有効にします
- Chromebook の設定 > 詳細セクション > 開発者
- 「Linux 開発環境」という設定タイトルが表示されるので、「オン」を選択してください。
- 画面上の指示が表示されます。
Ubuntu の手順
- sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
- wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
- sudo apt update
- sudo apt install griddb-meta
- sudo systemctl start gridstore
技術ブログ
GridDB Cloud スターターガイド
GridDB Cloud v2.0 の紹介 GridDB Cloud v2.0 が正式にリリースされ、新たに無料プランが追加されました。ただし現在のところ GridDB Cloud v2.0 ...
詳しくはこちら
Tauri、React、Node.js、GridDB によるデスクトップ WiFi ネットワーク・モニターの構築
はじめに この記事では、Node.js、Tauri、および React のような技術を複雑に織り交ぜながら、デスクトップ WiFi ネットワーク・モニターを構築するプロセスを掘り下げていきま ...
詳しくはこちら
JSON Web Tokens で GridDB REST API を保護する
これまでの記事で、GridDBとJava、Node.js、Goといった様々な技術を使ってREST APIを作る方法を取り上げてきました。また、以前簡単には触れることはありましたが、Webベー ...
詳しくはこちら
Deep Java Library (DJL) と GridDB を用いた時系列データの予測
はじめに 時系列データはどこにでもあります。株価や天候パターンから売上高やセンサーデータまで、私たちの生活の様々な場面で重要な役割を果たしています。過去の時系列データに基づいて将来の値を予測 ...
詳しくはこちら