Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 选择每天插入数百万行的数据库,为每个用户绘制图形_Database Design_Architecture_Scalability_System Design - Fatal编程技术网

Database design 选择每天插入数百万行的数据库,为每个用户绘制图形

Database design 选择每天插入数百万行的数据库,为每个用户绘制图形,database-design,architecture,scalability,system-design,Database Design,Architecture,Scalability,System Design,我正在写一个微服务,它需要存储和检索大量的净值与时间的数据来绘制图表 基本上,我需要通过cron为每个用户的净值存储大量数据 用户可以投资的共同基金有2万只。目前,有8000万用户,其中2000万已投资于多个共同基金。这些数字正在迅速增长 共同基金的价值每天在数据库中更新。使用共同基金的最新价值,更新所有用户的净值 现在,我的挑战是创建可扩展的设计来存储(用户id、networth、日期),从用户第一次投资时开始绘制图表 我的问题如下: 我应该使用什么数据库 一旦选择了数据库,实现每天插入约1亿

我正在写一个微服务,它需要存储和检索大量的净值与时间的数据来绘制图表

基本上,我需要通过cron为每个用户的净值存储大量数据

用户可以投资的共同基金有2万只。目前,有8000万用户,其中2000万已投资于多个共同基金。这些数字正在迅速增长

共同基金的价值每天在数据库中更新。使用共同基金的最新价值,更新所有用户的净值

现在,我的挑战是创建可扩展的设计来存储(用户id、networth、日期),从用户第一次投资时开始绘制图表

我的问题如下:

  • 我应该使用什么数据库

  • 一旦选择了数据库,实现每天插入约1亿条记录的可扩展性的方法是什么

  • 更新: 自用户进行第一次投资以来,需要存储数据。为简单起见,您可以假设每个用户使用5年

    对任何数据库开放。最好是图形数据库


    谢谢。

    据我所知,每天都会为每个用户生成新数据,正如问题中所述,所需的容量是每天插入1亿行。然而,重要的是要知道过去这些记录需要在数据库中保存多久?数据需要保存一个月、一年还是五年?假设趋势图使用过去全年的数据,那么所需的总行数将为1亿*365(天),即365亿行,即360亿行。假设一行占用24字节,则所需的总容量约为1TB(四舍五入)。这将有利于为所有用户存储1年的数据。年底时,可以对数据进行归档,并在明年年初恢复全部容量

    考虑到数据不需要ACID支持,因为它不是事务数据,并且数据在不同实体之间没有任何关系,NoSQL数据库似乎非常适合这里。假设一个批处理作业将同时运行并插入所有1亿用户的更新净值,那么似乎有必要将此插入时间保持得非常短。在这里,具有快速写入支持的键值对数据库(如Cassandra)似乎是一个不错的选择。分区键应该是userid。此外,数据的本质是不可变的,因此Cassandra的底层数据存储结构是仅附加的,这使得它更加适合

    由于数据是不可变的,因此非常适合将其缓存。根据缓存的容量,可以将所有或部分日常活动用户的数据保存在缓存中,以满足绘制图形所需的查询。LRU缓存可能是一个不错的选择

    注意:如果NoSQL数据库不是一个选项,那么基于userid进行分区的关系数据库也可以完成这项工作


    希望它能提供一些提示,如果除了问题中提到的使用场景之外还有其他使用场景,答案可能会改变。

    它看起来不像是非常庞大的数据集-这样的元组的一个实例可以存储为24字节(假设用户id很长),因此100mm仅为~2.2Gb。您需要提供更多关于您的需求的详细信息。您希望写入这100毫米记录的时间框架是什么(在一天、1小时窗口等期间)?这些记录是如何生成的-成批、勾选等。?绘图将如何工作-它是交互式的,还是可以等待?等等。时间框架不是问题。记录是成批生成的。是的,绘图需要是交互式的。