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



我正在编写一个微服务,需要存储和检索大量净资产与时间数据来绘制图形。

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

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

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

现在我的挑战是创建可扩展的设计来存储(user_id,净值,日期)每天从用户进行第一次投资时绘制图表。

我的问题如下:

  1. 我应该使用什么数据库?

  2. 选择数据库后,实现每天插入~1亿条记录的可扩展性的方法是什么?

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

对任何数据库开放。更喜欢图形数据库。

谢谢。

根据我的理解,每天都会为每个用户生成新数据,正如问题中提到的,所需的容量是每天插入 1 亿行。但是,重要的是要知道记录需要在过去多长时间内保留在数据库中?数据是否需要保存一个月、一年或五年?假设趋势图使用过去一整年的数据,则所需的总行数为 1 亿 * 365(天),即 365 亿行,即 360 亿行。假设一行占用 24 个字节,则所需的总容量为 ~ 1TB(四舍五入)。这将很好地为所有用户存储 1 年的数据。在年底,数据可以存档,并在明年年初恢复全部容量。

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

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

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

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

最新更新