【问题标题】:Pattern for managing large user uploaded datasets?管理大型用户上传数据集的模式?
【发布时间】:2010-12-09 21:34:39
【问题描述】:

我是一个相对菜鸟程序员。我正在创建基于 Web 的 GIS 工具,用户可以在其中上传 10 行到 100 万行的自定义数据集。数据集可以具有可变列和数据类型。您如何管理这些用户提交的数据集?

为每个数据集创建一个表是一个坏主意吗? (顺便说一句 - 我将使用 postgresql 作为数据库)。

如果这已经在某个地方得到了回答,我深表歉意,但我的搜索没有得到任何好的结果。我可能在搜索中使用了错误的关键字。

谢谢!

【问题讨论】:

  • 您能解释一下如何使用这些数据吗?数据的结构是任意的还是更大的列/数据类型集的子集?
  • 数据将用于动态生成标记和热图为其地图。他们还能够过滤基于位置或数据值的数据集。不会有任何跨数据集连接。一些数据集将用于创建有关特定位置的趋势图。

标签: ruby-on-rails postgresql dataset


【解决方案1】:

为每个数据集创建一个表根本不是一个“坏”的主意。 swivel.com 是一个与您所描述的非常相似的应用程序,我们使用每个数据集的表,它非常适合在用户上传的数据集上生成图形并使用连接比较数据集之间的数据。我们有超过 1 万个数据集和接近一百万个图,有些数据集非常大。

您还可以从 orm 层获得大量免费使用,例如,我们可以使用活动记录来处理数据集(每个数据集都是生成的模型类,其表设置为实际表)

如果你有任何类型的跨数据集计算,你必须做很多连接。

【讨论】:

  • 当您说生成模型类(假设为 RoR)时,您的意思是动态生成 AR 模型还是您实际上在您的应用程序中创建了相应的模型类?后者听起来不太可能,但想确定一下。
  • 你们在表中拥有的最大数据集是多少?
  • 为每个表动态生成一个类。
  • 我不记得最大的单曲是什么,但它很容易超过 100 兆,可能是几场演出。
  • 我决定采用这个选项。我会报告进展情况(就测试而言)。
【解决方案2】:

我和我的同事最近解决了一个类似的问题,我们在 MySQL 中的数据模型很差,并且正在寻找更好的方法来实现它。我们权衡了几个不同的选项,包括 MongoDB,最终使用了实体属性值模型。 EAV 模型本质上是一个 3 列模型。它允许我们用单个模型来表示可变数量的列和数据类型。

您可以阅读一些关于 our problem here 的信息,但听起来它可能也适合您。

【讨论】:

  • 我一直在思考这种方法。我的一位同事推荐了它。顺便说一句,我们正在使用 Rails。
  • 我们的应用程序也在 Rails 中。我们最终在 Active Record 之外编写了数据访问功能,因为每个大型数据集都在一个单独的表中,我们不需要额外的功能或开销。
  • 随着这个表的增长,它的查询性能如何?我通读了您的帖子,看起来您正在执行原子插入,而不是像我们将要执行的批量加载。我认为随着表的增长,我们的批处理加载速度会变慢以跟上索引。
  • 我们一直在批量导入 1-3 年的积压数据,然后每 15 分钟加载新数据。我们运行了大量的基准测试,以确保在初始加载和后续加载之后性能达到标准。我们导入的一些数据集有超过 200 多列,大约 700 万条记录/年,间隔 15 分钟。需要注意的一件事是,我们通常一次查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2015-09-05
  • 2022-07-22
  • 2020-01-27
  • 1970-01-01
  • 2021-09-03
  • 2010-09-09
相关资源
最近更新 更多