gpt4 book ai didi

Google Spreadsheets 替代方案的数据库选择和设计

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:14 29 4
gpt4 key购买 nike

我们正在为我们的客户构建电子表格网络应用程序。他们可以上传任何 csv (20 MB+),然后对数据执行操作(如下所列)。数据高度非结构化

在过去的几个月里,我们尝试了几种架构:

  1. 最初,我们以二维数组格式存储整个网格,例如 [ {a: 'b', x:'y'}, {a: 'e'} ] 在 PostGreSQL 的 JSON 数据类型中。但是随后更新的任何单元格都需要将整个 CSV 存储在数据库中。这使得应用程序非常慢。

  2. 接下来,我们转向 MongoDB。这提高了性能,但我们仍然遇到性能和可伸缩性问题。下面是我们的结构。

我们目前的数据库设计:
PostgreSql 结构:
表 - 数据集
id、名称、描述等...

Mongo结构:
第一行
_id, column1: value1, column2: value2, _data_set_id = datasets.id
第 2 行
_id, column1: value1, column2: value2, _data_set_id = datasets.id
等等……
此外,我们在 _data_set_id 键上有一个 mongo 索引,以支持以下类型的更快查询。

( db.coll.find({_data_set_id: xyz}) )

我们还使用来自第三方供应商的托管 mongo,负责分片、备份、正常运行时间等(我们没有 devops)

对数据的操作有两种类型:

  1. 行操作,例如添加或删除行
  2. 列操作,例如添加或删除列
    对数据的大部分操作都是列级操作,即仅更新每行中的列。

我们已经优化到 mongo 可以很好地处理少于 10k 行的数据集。但是,除此之外,我们无法扩展。我们目前在 Mongo 中有大约 25GB 的数据,在接下来的几周内我们将达到 50GB。我们当前的产品是一个原型(prototype),现在,我们正在重新考虑我们的数据库架构,以便更好地扩展。

我们数据库最关键的要求是:

  1. 快速读写。
  2. 列查询和更新。
  3. 更新单个单元格(即 x 行,y 列)值。

所以,

  1. Mongo 是适合此用例的数据库吗?
  2. 如果是,我们还能做些什么(除了索引、分片)来扩展 Mongo?

附言
我们确实意识到我们只能实现 CAP 中的两个 |也经历了Cassandra vs Mongodb vs Couchdb vs Redis我们还在评估 Couchdb(主-主复制、MVCC 等,但没有动态查询)、Cassandra (querying on unstructured data is not possible) 和 HBase(ColumnStore) 作为替代方案。

最佳答案

我强烈怀疑您的数据库实际上并未分片。如果您为分片付费,您可能无法从中受益。

然后您可以按索引进行分片,这应该可以节省您的时间,因为数据最终将存储在一个或两个分片服务器上,然后这些服务器可以根据您的 _data_set_id_ 更快地做出响应。

尝试输入:

sh.status()

这应该是您的数据库的分布情况。它可能只在一个分片上。

在设置您的分片之前,请仔细阅读这些内容。如果不重建整个集合,就很难重做分片!

http://docs.mongodb.org/manual/tutorial/choose-a-shard-key/

关于Google Spreadsheets 替代方案的数据库选择和设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850463/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com