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
技術ブログ
AIを使用した動画要約機能の開発
OpenAIに代表されるAI技術の進歩により、これまで手動では面倒すぎて実行できなかったタスクを自動化できるようになってきました。その一例が動画要約です。従来、動画コンテンツの要約は主に人間 ...
詳しくはこちら
LangChainチャットボットを使用してGridDBデータとやりとりする
この記事では、GridDBデータベースから自然言語クエリを使用して情報を取得するLangChainチャットボットの作成方法を説明します。PythonのLangChainライブラリとOpenA ...
詳しくはこちら
PandasとPython GridDB SQLクエリ
以前の記事「PandasデータフレームとGridDBの組み合わせ方」で、 Using Pandas Dataframes with GridDB という記事を説明しました。 そこでは、Pyt ...
詳しくはこちら
機械学習とGridDBによる給与予測
線形回帰は、ある変数の値を別の変数の値に基づいて予測する教師あり機械学習手法です。予測される変数は「従属変数」と呼ばれ、他の変数の予測に使用される変数は「独立変数」と呼ばれます。線形回帰では ...
詳しくはこちら