Database design 选择每天插入数百万行的数据库,为每个用户绘制图形
我正在写一个微服务,它需要存储和检索大量的净值与时间的数据来绘制图表 基本上,我需要通过cron为每个用户的净值存储大量数据 用户可以投资的共同基金有2万只。目前,有8000万用户,其中2000万已投资于多个共同基金。这些数字正在迅速增长 共同基金的价值每天在数据库中更新。使用共同基金的最新价值,更新所有用户的净值 现在,我的挑战是创建可扩展的设计来存储(用户id、networth、日期),从用户第一次投资时开始绘制图表 我的问题如下:Database design 选择每天插入数百万行的数据库,为每个用户绘制图形,database-design,architecture,scalability,system-design,Database Design,Architecture,Scalability,System Design,我正在写一个微服务,它需要存储和检索大量的净值与时间的数据来绘制图表 基本上,我需要通过cron为每个用户的净值存储大量数据 用户可以投资的共同基金有2万只。目前,有8000万用户,其中2000万已投资于多个共同基金。这些数字正在迅速增长 共同基金的价值每天在数据库中更新。使用共同基金的最新价值,更新所有用户的净值 现在,我的挑战是创建可扩展的设计来存储(用户id、networth、日期),从用户第一次投资时开始绘制图表 我的问题如下: 我应该使用什么数据库 一旦选择了数据库,实现每天插入约1亿
谢谢。据我所知,每天都会为每个用户生成新数据,正如问题中所述,所需的容量是每天插入1亿行。然而,重要的是要知道过去这些记录需要在数据库中保存多久?数据需要保存一个月、一年还是五年?假设趋势图使用过去全年的数据,那么所需的总行数将为1亿*365(天),即365亿行,即360亿行。假设一行占用24字节,则所需的总容量约为1TB(四舍五入)。这将有利于为所有用户存储1年的数据。年底时,可以对数据进行归档,并在明年年初恢复全部容量 考虑到数据不需要ACID支持,因为它不是事务数据,并且数据在不同实体之间没有任何关系,NoSQL数据库似乎非常适合这里。假设一个批处理作业将同时运行并插入所有1亿用户的更新净值,那么似乎有必要将此插入时间保持得非常短。在这里,具有快速写入支持的键值对数据库(如Cassandra)似乎是一个不错的选择。分区键应该是userid。此外,数据的本质是不可变的,因此Cassandra的底层数据存储结构是仅附加的,这使得它更加适合 由于数据是不可变的,因此非常适合将其缓存。根据缓存的容量,可以将所有或部分日常活动用户的数据保存在缓存中,以满足绘制图形所需的查询。LRU缓存可能是一个不错的选择 注意:如果NoSQL数据库不是一个选项,那么基于userid进行分区的关系数据库也可以完成这项工作
希望它能提供一些提示,如果除了问题中提到的使用场景之外还有其他使用场景,答案可能会改变。它看起来不像是非常庞大的数据集-这样的元组的一个实例可以存储为24字节(假设用户id很长),因此100mm仅为~2.2Gb。您需要提供更多关于您的需求的详细信息。您希望写入这100毫米记录的时间框架是什么(在一天、1小时窗口等期间)?这些记录是如何生成的-成批、勾选等。?绘图将如何工作-它是交互式的,还是可以等待?等等。时间框架不是问题。记录是成批生成的。是的,绘图需要是交互式的。