Go Faster.
Grow BIGGER.

GridDBはIoTやビッグデータに適した高スケーラブルな時系列NoSQLデータベースです

GridDBの特長

IoT指向モデル

IoT指向モデル

GridDBのトランザクションは、
コンテナ単位でACIDを保証、
また時系列データのアグリゲーション
(集約)やサンプリング、
期限解放などをサポート

...more

高い性能

高い性能

インメモリ指向型のアーキテクチャが、
並列処理による高速化と
オーバーヘッドの削減を実現し、
多様なデータ構造をサポート

...more

高い拡張性

高い拡張性

容量や性能に応じて
簡単に拡張・縮退

...more

高い信頼性と可用性

高い信頼性と可用性

障害が発生しても
無停止運用を実現

...more

GridDBの性能

o 100 120 0 20 40 60 80
x1,000 OPS
GridDB
o 100 120 0 20 40 60 80
x1,000 OPS

GridDBとMariaDBとパフォーマンス比較

13倍高速登録

他のパフォーマンスベンチマーク

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);
  }
  

Java 詳しくはこちら →

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();
  

JDBC 詳しくはこちら →

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!")
  
  

Python 詳しくはこちら →

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);
	  });
  

node.js 詳しくはこちら →

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")
  }
  

Golang 詳しくはこちら →

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]]' 
  
  

WebAPI GitHub Link →

Ubuntu

apt-getでインストール

  1. sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
  2. wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
  3. sudo apt update
  4. sudo apt install griddb-meta
  5. sudo systemctl start gridstore

Ubuntuのドキュメンテーション →

Windows (WSL)

まず Windows マシンに WSL をインストールしてください。

  1. 起動された (管理者権限の) Windows PowerShell またはコマンド プロンプトを開いてください。
  2. 「wsl --install」と入力してください。
  3. WSL の詳細な手順についてはこちら here

そのあと通常の Ubuntu の手順を実行してください。

  1. sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
  2. wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
  3. sudo apt update
  4. sudo apt install griddb-meta
  5. sudo systemctl start gridstore

WSLのドキュメンテーション →

Docker

Docker のインストール後

  1. docker network create griddb-net
  2. docker pull griddbnet/griddb
  3. docker run --network griddb-net --name griddb-server -d -t griddbnet/griddb

Dockerhubのリンク →

ChromeOS

まず Linux を有効にします

  1. Chromebook の設定 > 詳細セクション > 開発者
  2. 「Linux 開発環境」という設定タイトルが表示されるので、「オン」を選択してください。
  3. 画面上の指示が表示されます。

Ubuntu の手順

  1. sudo sh -c 'echo "deb https://www.griddb.net/apt griddb/5.3 multiverse" >> /etc/apt/sources.list.d/griddb.list'
  2. wget -qO - https://www.griddb.net/apt/griddb.asc | sudo apt-key add -
  3. sudo apt update
  4. sudo apt install griddb-meta
  5. sudo systemctl start gridstore

ChromeOS Docs →

GridDBはオープンソースとして公開しています。
専用コミュニティも開設しました