我正在创建一个数据库来存储投资组合中的所有交易,这些交易都是由个人的“策略”隔离的。
如下面的代码所示,在ListFields中添加新的合同/交易作为向数据库添加EmbeddedDocuments的方法有哪些缺点?
from mongoengine import *
import datetime
class Trade(EmbeddedDocument):
tradeDate = DateTimeField(default=datetime.datetime.now(), required=True)
position = IntField(required=True)
class Contract(EmbeddedDocument):
contractID = IntField(required=True, unique=True)
trades = ListField(EmbeddedDocumentField(Trade))
def addTrade(self, trade: Trade):
self.trades.append(trade)
class Strategy(Document):
strategyType = StringField()
contracts = ListField(EmbeddedDocumentField(Contract))
def addContract(self, contract: Contract):
self.contracts.append(contract)战略制定实例:
contract = Contract(contractID=1234)
contract.addTrade(Trade(position=1))
strat = Strategy(strategyType="Strategy One")
strat.addContract(contract)
strat.save()每个策略将有99%的时间低于10份合同,但很多时候,在“合同”ListField.中创建该策略之后,还会添加额外的合同
每次在每一份具体合同上进行交易时,其位置和日期将记录在添加到“交易”ListField.中的新的贸易文件中。
发布于 2017-08-20 10:59:38
有一个巨大的缺点:插入时间。insert元素do列表似乎是很自然的O(1)时间,但它不在MongoDB中。在list中追加元素被视为将元素插入到list的任何位置,因此需要O (n )时间(n是“契约”列表长度)。当您拥有更大的数据库时,这将是痛苦的。
做什么?试着将每一份合约交易保持为普通的蒙戈文件,并在contractID上建立索引。插入时间为O(1),读取时间类似于列表方法。
https://stackoverflow.com/questions/43807872
复制相似问题