我们在32 GB(内存)服务器上的InfluxDB实例中存储了大量的分分钟股价波动数据,具有充足的存储空间。不幸的是,我们的记忆力有问题。已完成以下调整:
cache_snapshot_memory_size => 6553600,
cache_snapshot_write_cold_duration => '1m',
max_series_per_database => 10000000,
cluster_write_timeout => '10s',
系列的数量约为65万,而且几乎没有增长。
简化后,我们的模式目前将出价和要价存储在单个测量值orderbook
中,除了一些(索引的)标签外,还包含(非索引的)字段,如bid
、ask
、bid_volume
、ask_volume
等。除了ticker
标签之外,所有标签的基数都很小。
如果每个股票行情器有一个订单簿测量值,我们会看到内存占用减少吗?orderbook.aapl
、orderbook.googl
、orderbook.abc
等
目前,我们有大约300个股票行情,但几年后可能会增长到10000个。
在检索数据时,我们总是在股票代码上使用过滤器。
参考文献:
- 争论不将数据存储在度量中,而是因为编写查询有多难。记忆表现对我们来说至关重要:https://docs.influxdata.com/influxdb/v1.1/concepts/schema_and_data_layout/
- 由于内存问题,在"帐户"上拆分,但这是一个旧的博客条目:http://www.ryandaigle.com/a/time-series-db-design-with-influx
gophers.slak.com上#influxdb的答案:
-
您提议的方法是无效的。我们强烈建议使用标签。这就是数据库假设用户将对其数据建模的方式。向测量添加元数据是一种反模式
-
将独特的标签拆分为独特的测量值不会显著帮助您的内存消耗