2

I am designing an IoT application that ingests high volumes of time-series data in real time. I am evaluating GridDB as the backend due to its in-memory capabilities, hybrid storage model, and ACID compliance for container-level transactions.

In particular, I am trying to determine the best partitioning strategy to balance load and achieve efficient query performance for time-based queries. GridDB supports various partitioning methods (hash, interval, and interval-hash), each affecting data distribution and pruning efficiency differently. Also, I need to decide on the replication configuration—choosing between asynchronous and semi-synchronous modes—to balance data consistency, availability, and update overhead.

Below is a sample Java snippet that demonstrates creating a time-series container with a basic schema.

import com.toshiba.mwcloud.gs.*;
import com.toshiba.mwcloud.gs.common.*;

public class GridDBSetup { public static void main(String[] args) throws Exception { // Establish connection to the GridDB cluster GridStore store = GridStoreFactory.getInstance().getGridStore("clusterName", "username", "password");

    // Define container schema for a time-series data container
    ContainerInfo containerInfo = new ContainerInfo("SensorData", ContainerType.TIME_SERIES);
    containerInfo.setColumnNames(new String[]{
        "timestamp",  // primary key (time value)
        "sensorID", 
        "value", 
        "status"
    });
    containerInfo.setColumnTypes(new DataType[]{
        DataType.TIMESTAMP, 
        DataType.STRING, 
        DataType.DOUBLE, 
        DataType.STRING
    });
    // Specify the row key (primary key) column index
    containerInfo.setRowKeyColumn(0);

    // Optional: In some GridDB versions, you might include partitioning hints or tuning options.
    // For example, if using a TQL-based method or custom API for partitioning:
    // containerInfo.setPartitionOption("INTERVAL '1 DAY'");
    // containerInfo.setReplicationNum(3);    // for example, 3 replicas
    // containerInfo.setReplicationMode(0);     // 0: Asynchronous, 1: Semi-synchronous

    // Create the container
    store.putContainer(containerInfo);

    // Sample query using TQL to filter by time range
    String queryString = "SELECT * FROM SensorData WHERE timestamp >= ? AND timestamp < ?";
    Query query = store.getContainer("SensorData").query(queryString);
    query.bind(new Object[]{1614556800000L, 1614643200000L});
    RowSet<Row> rs = query.fetch();
    while (rs.hasNext()) {
        Row row = rs.next();
        System.out.println(row.toString());
    }

    // Close connection
    store.close();
}


}

0 Answers0