Introduction
Zendure’s plug-and-play home energy management systems are backed by a home energy storage data platform. Its solar storage devices are used in more than 60 countries and regions in Europe, North America, and Asia-Pacific, with more than 1.17 million connected devices. The product line grew from one storage category to nine, including solar flow controllers, smart current transformers, and smart plugs. Data volume grew from tens of millions of records to hundreds of billions. To handle rising write pressure and storage costs, Zendure upgraded from TDengine TSDB-OSS to a TDengine TSDB-Enterprise cluster. Storage costs fell by roughly 80%, single-device queries now return results in milliseconds, and the cluster has run without failure for more than nine months.
Business context
About Zendure
Zendure is a global energy management brand focused on plug-and-play home energy management systems. Its core product is the SolarFlow series of smart storage inverters, from balcony solar products such as SolarFlow 800 to rooftop storage products such as SolarFlow 2400 Pro and 4000 Mix AC+. Companion devices include expandable battery modules in the AB series, Smart Meter CT, Smart Plug Pro, and Power Hub. Together, these products make up Zendure’s home energy management system. Zendure users are spread across major markets in Europe, North America, and Asia-Pacific. The company has more than seven years of technology development experience and over 150 global patents. In 2024 alone, Zendure users generated 13,172 MWh of solar power, about the amount 800,000 electric vehicles would consume while driving 100 kilometers.
Business scenarios
The home energy storage data platform supports two main home energy management scenarios:
Balcony Power Plant. Many apartment dwellers in Europe cannot install rooftop solar. Zendure’s approach is to mount two to four solar panels on a balcony railing, connect them to a SolarFlow inverter and battery, and plug the system into a household outlet. During the day, solar power charges the battery. At night, the battery discharges. Users can watch energy flow and electricity savings in real time through the app.
AC-coupled storage. For owners of detached homes that already have rooftop solar, the Mix AC+ series adds storage without modifying the existing system, which can raise the solar self-consumption rate.
In both scenarios, every device continuously produces time-series data such as power, current, and input/output energy. The app also uses AI algorithms for charge and discharge scheduling. It forecasts generation from weather data, charges during low-price windows based on dynamic electricity tariffs such as France’s EDF Tempo, and schedules around each household’s consumption patterns.
Technical challenges
When Zendure first started with TDengine, it had three Supertables and a few thousand devices. A little over a year later, the business had grown a hundredfold and the data layer was under increasing pressure.
Challenge 1: Concurrent writes from 1.17 million devices
Several product lines ramped up at the same time, including solar flow controllers, smart CTs, and smart plugs. Connected devices climbed from a few thousand to 1.17 million. Every device produces power, current, energy, and other time-series data at high frequency. A single solar flow power table has accumulated close to 100 billion rows, and peak write volume reaches hundreds of thousands of data points per second. The original single-machine deployment could no longer absorb that write pressure.
Challenge 2: Annual storage costs above US$200,000
Zendure deploys on AWS, where EBS storage is billed monthly. With 1.17 million devices, high-frequency collection, and retention of about 10 years, the data volume reaches hundreds of billions of records. At that scale, uncompressed storage would require 7 to 8 TB and cost more than US$200,000 per year. For a growing global company, that is a significant expense.
Challenge 3: Query latency visible in the app
As data volume grew, the load time for power curves in the app went from a few hundred milliseconds to several seconds, and some wide-range queries timed out entirely. Users began reporting that “the app got slow.” The target was millisecond-level query response even as the dataset continued to grow.
Challenge 4: Keeping a global service available 24/7
Zendure users span multiple time zones, so the system has to run 24/7. A single-machine failure once left European users unable to view app data for two hours, and the company received a flood of complaints. High availability has been a hard requirement ever since.
Evaluating the options
Once the open-source edition reached its limits, Zendure formed a technical selection team to evaluate write throughput, query efficiency, compression, and cluster high availability.
| Dimension | MySQL | InfluxDB | TDengine |
|---|---|---|---|
| Write performance | Barely holds up after sharding, complex to operate | Open-source edition does not support clusters | Native distributed cluster, linear scaling |
| Compression ratio | No native compression | From 3:1 to 5:1 | From 6:1 to 60:1 |
| Query performance | Minutes for large-table queries | Seconds for aggregate queries | Milliseconds per device, seconds across devices |
| Cluster high availability | Requires primary-replica plus read/write splitting | Clustered edition is closed-source and paid | Native three-replica cluster |
| SQL compatibility | Full SQL | SQL-like (non-standard) | Standard SQL |
| Operational cost | High (sharding plus index maintenance) | Medium | Low (automated operations) |
InfluxDB is a solid choice for some IoT scenarios, but its open-source edition does not support cluster deployment. The clustered edition is a commercial closed-source product, and its compression ratio was lower in this evaluation. With MySQL, the cost of sharding and index maintenance rises sharply as data grows.
TDengine best matched the evaluation criteria for write performance, compression ratio, cluster capability, and SQL compatibility. Because Zendure already had experience with the open-source edition, it upgraded to TDengine TSDB-Enterprise.
Architecture and data modeling
System architecture
The system uses a layered architecture spanning the access, application, domain, and base layers:
Data model design
Zendure uses TDengine’s Supertable-plus-subtable modeling approach. The core design principle is simple: Supertables are divided by business category, subtables by device, and Tags by query dimension.
Zendure created 16 Supertables in total (11 currently in use and five reserved for future product lines), grouped by product line:
| Business line | Supertables | Devices | Notes |
|---|---|---|---|
| Solar flow control | power / electric / inout | ~190,000 each | Core business, largest data volume |
| Smart current transformer | power / inout | ~90,000 each | Precise current metering |
| Smart plug | power / inout | ~60,000 each | Household electricity management |
| Power forecast | predic_power | 40,000 | AI power forecasting |
| ROI analysis | hems_profit | 76,000 | Return-on-investment display |
| User energy consumption | consumer_energy | 102,000 | Household energy profiles |
| Tesla integration | tesla_inout | 1,268 | Third-party storage integration |
The Supertable for SolarFlow power data looks like this:
-- Supertable for solar flow power
CREATE STABLE st_device_solar_flow_power (
ts TIMESTAMP, -- collection timestamp
power INT, -- real-time power value (W)
type INT, -- power type (charging / discharging / solar, etc.)
hems_id BIGINT -- ID of the home energy management system
) TAGS (
device_id BIGINT -- unique device identifier
);
A single SolarFlow inverter has one subtable under each of the power, current, and input/output energy tables. The device_id tag identifies the device, and the business layer links to the household dimension through hems_id.
Typical query scenarios:
-- 1. Latest power for one device (real-time app display)
SELECT last_row(*) FROM st_device_solar_flow_power
WHERE device_id = 100048;
-- Response time: < 10ms
-- 2. Power trend for one device over the past 24 hours (app power curve)
SELECT _irowts, AVG(power), MAX(power), MIN(power)
FROM st_device_solar_flow_power
WHERE ts >= NOW() - 1d AND device_id = 100048
INTERVAL(5m);
-- Response time: < 100ms
-- 3. Daily total generation for all devices this month (operational analysis)
SELECT _irowts, SUM(energy)
FROM st_device_solar_flow_inout
WHERE ts >= '2026-07-01'
INTERVAL(1d);
-- Response time: ~2 seconds (covering 180,000+ devices)
-- 4. Average power aggregated by household (HEMS analysis)
SELECT hems_id, AVG(power)
FROM st_device_solar_flow_power
WHERE ts >= NOW() - 1d
PARTITION BY hems_id;
-- Response time: ~3 seconds
Results
Core metrics
| Metric | Before (MySQL-Based) | After (TDengine TSDB-Enterprise) | Improvement |
|---|---|---|---|
| Write performance | Single-machine bottleneck, write latency at peak | 3-node cluster, stable high-throughput writes | Stable at peak load |
| Query performance | Minutes for wide-range queries | Under 10ms per device, about 2 seconds across devices | 100x or more |
| Storage compression | No compression on MySQL, 5 to 9% on OSS | 15% to 31% compression ratio | About 1:6 to 1:60 |
| Storage cost | About US$200,000+ per year (estimated) | About US$35,000 per year | About 80% cost savings |
| High availability | Single machine, no redundancy | 3 nodes and 3 replicas, 9+ months without failure | Redundant cluster |
| Data retention | No long-term retention possible | About 10 years (KEEP 3650d) | Supports long-term retention |
Data growth at a glance
Solar flow control is by far the largest data producer. Power data alone accounts for nearly 100 billion records, more than 60% of the total data volume.
Final thoughts
With TDengine TSDB-Enterprise, Zendure handled concurrent writes from more than a million devices and stored hundreds of billions of records. Storage costs fell by about 80%, while the cluster met the 24/7 availability requirement and ran without failure for more than nine months.
The move from the open-source edition to the enterprise edition used the taosX data migration tool and completed with zero downtime. The Supertable and subtable model also meant that new product lines required only new table definitions, without changes to existing business logic. These choices reduced development and operations costs.
As Zendure continues to expand in global markets, it plans to explore tiered hot and cold data storage to reduce costs further and deepen its analytics capabilities. The goal is to use its historical data more effectively in the business. The company also thanks the TDengine team for its technical support during migration and operations.


