【问题标题】:Should I use files or a database?我应该使用文件还是数据库?
【发布时间】:2016-07-05 16:51:58
【问题描述】:

我正在构建一个云同步应用程序,它可以跨多个设备同步用户数据。我正处于十字路口,正在决定是将数据作为文件存储在服务器上,还是存储在关系数据库中。我正在使用 Amazon Web Services,如果我选择将数据存储在表中,我会将 S3 用于用户文件或其数据库服务。我存储的数据是每十秒钟应用程序的状态。存储在数据库中可能会有问题,因为每个用户要存储的平均行数是 100,000 行,而我当前的用户群为 20,000 人,即刻有 20 亿行。将这些信息存储在文件中会更好吗?因为这将是大约 100 个文件,每个用户总共 6 兆字节。

【问题讨论】:

  • 您能否详细说明“我存储的数据是应用程序的状态”是什么意思?是否可以将这些数据规范化为列以使其对关系数据库更敏感?你能不能区分自上次更新以来所做的更改并存储这些更改而不是完全转储所有内容?
  • @MarcFowler 这是一个专业应用程序,每 10 秒从外部机器获取各种数据(氧气水平,氮气水平),因此它确实需要以这种方式构建。是的,我只会同步更改,但不是有 20 亿行来查询该用户的特定行吗?
  • 考虑同时使用。适合它的数据库,适合它的操作系统。因此,通常情况下,这意味着非 blob 存储,即两者的融合
  • 当您谈论键/值存储时,数据库和文件之间的界限可能有点模糊,S3 在技术上就是这样做的。大多数系统最终都是 S3 和某种数据库(如 RDS)的混合体。找出这些工具和架构师能最好地解决哪个问题。

标签: mysql database file cloud


【解决方案1】:

正如 cmets 中所讨论的,我会将这些存储为文件。

S3 非常适合作为键/值存储,如果您能够区分更改并确保不会不必要地复制大量数据,则通过下载相关文件来进行同步会容易得多从 S3 并在客户端同步它们。

您不必运行可以存储大量行并保持快速将它们提供给客户端的数据库服务器,从而节省了大量成本。

我唯一真正担心的是,如果您想将多个用户的统计信息/数据/信息汇总为后端或管理视图,这些文件中的数据可能难以解析。您将无法编写简单的 SQL 查询来总结值等,并且必须打开相关文件,使用 awk 或正则表达式等处理它们,然后以这种方式计算值。

您可能会在客户端对与该用户相关的特定文件执行此操作,因此那里可能存在一些重叠!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多