我正在尝试制作一个股市模拟器,我希望尽可能真实。
我的问题是:纳斯达克有3000多家公司,在其股票数据库中,对吗?但是,是否像下面的示例一样,它是sql数据库上每个符号的每个份额的一个输入行?
Company Microsoft = MSFT
db `companies_shares`
ID symbol price owner_id* company_id last_trade_datetime
1 msft 58.99 54334 101 2019-06-15 13:09:32
2 msft 58.99 54334 101 2019-06-15 13:09:32
3 msft 58.91 2231 101 2019-06-15 13:32:32
4 msft 58.91 544 101 2019-06-15 13:32:32
*owner_id = user id of the person that last bought the share.
还是基于做市商提供的可交易股票和买卖需求来计算?例如:
我已经尝试了第一个示例,因为它占用了我的数据库很大的空间,并且我担心所有这些交易的带宽,尤其是每分钟进行数百万个请求(交易)时。
我已经尝试了第一个示例,因为它占用了我的数据库很大的空间,并且我担心所有这些交易的带宽,尤其是每分钟进行数百万个请求(交易)时。
什么是最佳解决方案?数据库还是数学?
谢谢。
答案 0 :(得分:0)
您可能还希望与Google建立多对多关系。
以这种方式思考。一个人可能拥有许多股票。一支股票可能被很多人持有。这是多对多的关系,通常使用物理数据库中的三个表来建模。通常写为M:M
此外,人们可能会多次购买或出售一家公司,这可能会使用另一张表进行建模。从人的角度来看,会有很多交易,因此我们拥有一种新型的人(人)与许多(交易)的关系。这通常被称为1:M关系。
关于存储内容,一般而言,最好存储原子数据。例如,对于一笔交易,请存储我想要的客户,交易日期/时间,购买或出售的数量以及至少价格。
您可能还想阅读有关规范化的信息。通常,第三范式是要争取的一个很好的水平,但这很多是“它取决于您的情况和您需要做什么”。人们通常会因访问速度的不规范而以增加存储空间和可能更复杂的更新为代价。...
您还提到了绩效,通常是纳斯达克这样的大公司。如果使用IT基础架构,则将使用多层。每个层将具有不同的角色,因此具有不同的功能特性和性能特性。通常,它们将是在集群中一起运行的多台服务器。例如,他们可能使用NoSQL系统来管理大量交易。从那里可能会出于其他目的(例如防欺诈,分析,报告等)而将消息(例如kafka)输入其他系统。
您还提到了数据量。我不知道您在谈论多少数据,但是在我工作的一位金融客户中,有300 PB的存储字节(1 PB = 1000 TB)仅在300台服务器上运行,仅用于其分析平台。就金融机构而言,它们大概是中型到大型。
我希望这可以帮助您指出正确的方向。