Lindorm Time Series Database (TSDB) is highly compatible with OpenTSDB protocols, so existing OpenTSDB pipelines work without modification. As a managed service, TSDB eliminates the operational overhead of self-hosted OpenTSDB clusters while delivering higher performance, richer features, and lower storage costs.
Feature comparison
OpenTSDB is an open-source time series database built on Apache HBase. TSDB builds on the same OpenTSDB protocol compatibility while using proprietary indexing, data models, and streaming aggregation developed by Alibaba Cloud.
The following table compares TSDB and OpenTSDB across operations, features, cost, and stability.
| Dimension | OpenTSDB | TSDB |
|---|---|---|
| Operations and administration | ||
| Service availability | Depends on your cluster setup and component dependencies | 99.9% |
| Data durability | Depends on your cluster setup and component dependencies | 99.9999% |
| Software and hardware costs | High database server costs | No hardware deployment; pay for what you use |
| Maintenance | Must hire database administrators (DBAs) | Fully managed; no DBA required |
| Deployment and scaling | Requires hardware procurement, data center hosting, and server setup | Activated in a few clicks; scale within minutes |
| Component dependencies | Must manage AsyncHBase and HBase dependencies | No operations and maintenance (O&M) required |
| Parameter tuning | Manual configuration of salt, connections, synchronous flushing, and compaction | Preconfigured based on best practices |
| Table creation | Manual O&M on static table creation statements | Managed transparently by TSDB |
| Monitoring and alerting | Requires external tools | Built-in monitoring system included |
| Features | ||
| Data models | Single-value model only | Multi-value and single-value models |
| SDK | Open source; query not supported | TSDB SDK for Java with robust and stable features |
| Data types | Numeric only | Numeric, Boolean, and string |
| SQL queries | Not supported | Supported |
| Management console | Basic graph display | Multidimensional visualization, data management, and time series insights |
| Character support | Letters only | Letters and Chinese characters |
| Tags parameter | Required | Optional |
| Tag keys per metric | Up to 8 | Up to 16 |
| Ecosystem integration | Limited to open-source tools | Integrates with Flink and IoT Platform |
| Costs | ||
| Data compression | General-purpose algorithms; low compression ratio | Time-series-specific algorithm; high compression ratio |
| Stability | ||
| Read/write isolation | Coupled reads and writes; connection exhaustion increases failure risk | Separate thread pools for reads and writes; stable performance |
| Aggregation | In-memory aggregation; susceptible to out of memory errors | Streaming aggregation with fine-grained memory management |
OpenTSDB protocol compatibility
TSDB is compatible with most OpenTSDB HTTP API endpoints for data ingestion and querying. However, because TSDB's underlying architecture differs significantly from OpenTSDB's, some O&M-oriented endpoints are not supported.
Note: For the full OpenTSDB HTTP API reference, see HTTP API.
Supported and unsupported endpoints
| API endpoint | Compatible | Notes |
|---|---|---|
/api/aggregators | Yes | |
/api/config | Yes | |
/api/put | Yes | Core write endpoint |
/api/query | Yes | Core query endpoint |
/api/query/last | Yes | |
/api/search/lookup | Yes | |
/api/serializers | Yes | |
/api/stats | Yes | |
/api/suggest | Yes | |
/api/version | Yes | |
/s | No | Static file serving; not applicable to a managed service |
/api/annotation | No | Annotation management is not supported |
/api/dropcaches | No | Cache management is handled internally |
/api/rollup | No | Use TSDB's SQL query interface for rollup-equivalent queries |
/api/histogram | No | Not supported |
/api/tree | No | Tree-based metadata management is not supported |
/api/uid | No | UID management is handled internally |
TSDB-specific endpoints
TSDB extends the OpenTSDB protocol with additional endpoints for multi-value data and lifecycle management.
| Endpoint | Description |
|---|---|
/api/mput | Writes multi-value data |
/api/mquery | Queries multi-value data |
/api/query/mlast | Queries the most recent data points from time series using the multi-value model |
/api/dump_meta | Queries tag values paired with a tag key |
/api/ttl | Sets the time to live (TTL) for data |
/api/delete_data | Deletes data |
/api/delete_meta | Deletes a time series |
Performance comparison
In benchmark tests against a 2,160,000,000-data-point dataset, TSDB significantly outperformed OpenTSDB on equivalent hardware:
Write throughput: TSDB sustained approximately 4,200 transactions per second (TPS) across all write scenarios — roughly 4x higher than OpenTSDB's peak of approximately 1,094 TPS.
Query performance (5-minute range): TSDB handled single-tag queries at 3,831 TPS with an average response time (RT) of 44 ms. OpenTSDB peaked at approximately 2 TPS with an average RT exceeding 77 seconds — a difference of ~1,900x in throughput.
Query performance (3-hour range): TSDB completed large-dataset queries across 1,000 tag combinations at 11.76 TPS. OpenTSDB became unavailable for all 3-hour range scenarios, even when query concurrency was reduced from 5,000 to 1.
The detailed test data is provided in the sections below.
Test environment
| Component | Specification |
|---|---|
| Write server | 2 cores, 8 GB memory |
| Query server | 64 cores, 256 GB memory |
| ApsaraDB for HBase (OpenTSDB backend) | 8 cores, 16 GB memory × 5 servers |
| OpenTSDB version | V2.3.2 with ApsaraDB for HBase V1.5.0.1 |
| TSDB version | V2.4.2 |
Dataset
| Parameter | Value |
|---|---|
| Total time series | 2,000,000 |
| Collection interval | 10 seconds over 3 consecutive hours |
| Total data points | 2,160,000,000 |
| Metric values | Random integers from 1 to 100 |
Five tag key-value pairs were used. The first four (zone, cluster, group, app) generate 2,000,000 unique time series (10 × 20 × 100 × 100). The fifth (ip) has 2,000,000 unique values.
Stress test configuration
| Item | Value |
|---|---|
| Duration | 3 minutes |
| Mode | Fixed concurrency |
| Stress testers | 5 |
| TPS per tester | 1,000 |
| Calling method | Synchronous |
| Connection timeout | 600,000 ms |
| Query timeout | 600,000 ms |
Each test run starts with a database restart and a preloading pass to eliminate cold-start effects.
Write performance
Scenarios use a 10-second or 60-second collection interval with 1 or 10 concurrent metrics, all with 4 tag keys × 2,500 tag values.
TSDB write results
| Scenario | Interval (s) | Metrics | TPS | Avg RT (ms) | Min RT | Max RT | 80th percentile RT | 95th percentile RT | 99th percentile RT |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 10 | 1 | 4,194.23 | 149.91 | 36.9 | 1,808.0 | 210.42 | 239.11 | 250.38 |
| 2 | 10 | 10 | 4,223.09 | 148.4 | 37.2 | 474.22 | 209.74 | 238.32 | 248.52 |
| 3 | 60 | 1 | 4,225.24 | 150.37 | 37.09 | 645.57 | 211.22 | 239.01 | 249.88 |
| 4 | 60 | 10 | 4,227.01 | 148.61 | 37.4 | 888.72 | 209.93 | 238.68 | 249.38 |
OpenTSDB write results
| Scenario | Interval (s) | Metrics | TPS | Avg RT (ms) | Min RT | Max RT | 80th percentile RT | 95th percentile RT | 99th percentile RT |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 10 | 1 | 1,008.12 | 832.68 | 47.19 | 1,310.56 | 1,158.44 | 1,255.66 | 1,283.67 |
| 2 | 10 | 10 | 1,094.4 | 770.82 | 43.64 | 1,469.04 | 1,078.78 | 1,238.06 | 1,281.69 |
| 3 | 60 | 1 | 804.82 | 1,047.59 | 132.18 | 1,297.71 | 1,188.12 | 1,269.82 | 1,281.32 |
| 4 | 60 | 10 | 1,039.72 | 807.29 | 44.43 | 1,421.03 | 1,110.46 | 1,242.02 | 1,281.76 |
Query performance
Each scenario queries 1 metric over a 5-minute or 3-hour time range with 1 to 1,000 tag pairs. Scenarios 5–8 query the full dataset over a 3-hour window.
TSDB query results
| Scenario | Tags | Time range | TPS | Avg RT (ms) | Min RT | Max RT | 80th percentile RT | 95th percentile RT | 99th percentile RT |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 5 min | 3,831.8 | 44.14 | 36.94 | 416.98 | 44.51 | 46.73 | 75.5 |
| 2 | 10 | 5 min | 1,148.22 | 657.77 | 105.96 | 1,054.96 | 715.5 | 745.87 | 796.8 |
| 3 | 100 | 5 min | 215.96 | 3,522.96 | 557.81 | 4,067.14 | 3,679.5 | 3,786.29 | 3,854.57 |
| 4 | 1,000 | 5 min | 39.37 | 19,692.53 | 1,784.93 | 22,370.1 | - | - | - |
| 5 | 1 | 3 hours | 2,856.1 | 262.76 | 41.29 | 847.01 | 296.99 | 443.52 | 489.4 |
| 6 | 10 | 3 hours | 446.54 | 1,684.15 | 67.75 | 2,161.85 | 1,802.8 | 1,898.0 | 1,959.02 |
| 7 | 100 | 3 hours | 69.25 | 11,237.9 | 1,873.55 | 12,776.56 | 11,917.05 | 12,133.61 | 12,316.79 |
| 8 | 1,000 | 3 hours | 11.76 | 65,615.45 | 5,742.12 | 86,952.76 | - | - | - |
OpenTSDB query results
| Scenario | Tags | Time range | TPS | Avg RT (ms) | Min RT | Max RT |
|---|---|---|---|---|---|---|
| 1 | 1 | 5 min | 1.97 | 77,842.67 | 10,486.16 | 109,650.51 |
| 2 | 10 | 5 min | 1.95 | 78,062.6 | 12,723.96 | 119,911.53 |
| 3 | 100 | 5 min | 1.96 | 78,865.02 | 15,942.89 | 141,365.75 |
| 4 | 1,000 | 5 min | 1.97 | 77,331.91 | 7,780.02 | 113,582.65 |
| 5 | 1 | 3 hours | N/A | N/A | N/A | N/A |
| 6 | 10 | 3 hours | N/A | N/A | N/A | N/A |
| 7 | 100 | 3 hours | N/A | N/A | N/A | N/A |
| 8 | 1,000 | 3 hours | N/A | N/A | N/A | N/A |
Note: OpenTSDB became unavailable in scenarios 5–8. Reducing query concurrency from 5,000 to 500, 50, 5, or 1 did not restore availability. N/A indicates the service was unavailable.