我正在存储来自多个加密交换的历史交易数据。每个交易所列出了不同的符号,例如“BTC-28MAR19_FUTURES”,“BTC-31MAR19_FUTURES”等,可以交易,总计最多500个不同的符号。对于这些符号中的每一个,存在交易数据,其类似于“时间戳”,“价格”,“交易量”等。每个符号有数百万个交易,我需要存储。
我曾经为每个交换创建一个集合,并将这些交换的每个符号存储到这个单独的集合中,即:
collection 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
创建的自动唯一索引。
什么是查询模式?它可能适合在您要一起查询的字段上创建compound index。
通常,您应该将索引添加到您查询的字段中。您可以使用explain()
plan来确保您的查询得到有效执行。
如果您是MongoDB的新手,this free online class是一个很好的起点。