我正在存储来自几个加密货币交易所的历史交易数据。每个交易所都列出了可以交易的不同交易品种,例如"BTC-28MAR19_FUTURES", "BTC-31MAR19_FUTURES"
等,总共多达500种不同的交易品种。对于这些交易品种中的每一个都存在交易数据,类似于 "timestamp", "price", "volume"
等。每个交易品种有数百万笔交易,我需要存储这些交易。
我曾经为每个交易所创建一个集合,并将这些交易所的每个交易品种存储到这个集合中,即:
集合name = bitmex_futures
,其中包含此交易所所有现有产品的所有交易。条目如下所示:
{"symbol" : "BTC-28MAR19", "price" : 4500, "trade_id" : 12345, etc.}
{"symbol" : "BTC-28MAR19", "price" : 4300, "trade_id" : 12346, etc.}
{"symbol" : "BTC-31MAR19", "price" : 4230, "trade_id" : 12347, etc.}
但是,如果我想查询数据,这非常慢,因为有太多的条目。
为每个符号创建一个集合是否有意义?如果我最终有 500 个集合,每个集合中都有多达数百万个交易数据,这还会很快(甚至更快(吗?
如果您不需要跨交易品种查询,则每个交易品种一个集合可能有意义。如果您的trade_id
是唯一的,我会将其作为_id
提供,以便您可以使用为_id
创建的自动唯一索引。
查询模式是什么?在要一起查询的字段上创建复合索引可能很合适。
通常,应向查询的字段添加索引。您可以使用explain()
计划来确保查询得到有效执行。
如果您是MongoDB的新手,那么这个免费的在线课程是一个很好的起点。