我们有大量的亚分钟股票价格变动数据存储在 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
最佳答案
#influxdb 的回答 gophers.slack.com :
您提出的方法效果不佳。我们强烈建议使用标签。这就是数据库假设用户对其数据进行建模的方式。将元数据添加到测量中是一种反模式
将唯一标签拆分为唯一测量值不会显着减少内存消耗
关于database - 在 InfluxDB 中将测量拆分为多个测量以提高内存性能?例如,金融价格数据的每个股票代码的一种度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41693409/