【问题标题】:I want to write a 75000x10000 matrix with float values effectively into a database我想将具有浮点值的 75000x10000 矩阵有效地写入数据库
【发布时间】:2019-06-17 14:39:08
【问题描述】:

谢谢你听我说完。

我有一个数据集,它是一个形状为75000x10000 的矩阵,其中填充了浮点值。把它想象成热图/相关矩阵。我想将它存储在 SQLite 数据库中(SQLite,因为我正在修改现有的 Django 项目)。源数据文件大小为 8 GB,我正在尝试使用 python 来执行我的任务。

尝试使用 pandas 分块 将文件读入 python 并将其转换为未堆叠的成对索引数据并将其写入 json 文件。但是这种方法正在消耗我的计算成本。对于100x10000 大小的块,它会生成一个 200 MB 的 json 文件。

这个 json 文件将用作在 Django 后端形成 SQLite 数据库的夹具。

有没有更好的方法来做到这一点?更快/更智能的方式。 我不认为花一整天时间写出一个 90 GB 的奇数 json 文件是要走的路。甚至不确定 Django 数据库是否可以承受这种负载。

感谢任何帮助!

【问题讨论】:

  • 您可能想使用 spark 探索 hdf5 或 parquet。 medium.com/@ph_singer/…
  • 75,000 X 10,000 是要推送的很多数据。期望您与pandas 一起使用的任何解决方案都有一些等待时间。你能对文件做任何总结吗?分组类别,聚合值?另外-您的数据由什么组成。我们可以使用sparse matrix之类的东西是不是很多零?
  • 数据集不是稀疏的。我的目的不是总结数据。我想最终将矩阵从源文件移动到 Django SQLite 数据库。中间人的工作是这里的巨大障碍。
  • 你打算如何在 sqlite 数据库中拥有这个矩阵?什么样的表布局?
  • 我想将我的大矩阵数据集插入到 sqlite django DB 中。矩阵可以分解为 [index |专栏 | value] 数据库需要格式为 {'model':'xxx','pk': int, 'fields': {'feat1':index , 'feat2':column, 'value':value}} 创建后者是什么造成了问题

标签: python sql django pandas bigdata


【解决方案1】:

SQLite 本身就给人留下了深刻的印象,但它可能不会为您提供您正在寻找的那种规模的性能,因此即使您现有的项目是 SQLite 上的 Django,我还是建议您简单地编写一个 Python 包装器不同的数据后端,只在 Django 中使用。

更重要的是,忘记在这样的事情上使用 Django 模型;它们是为方便而构建的抽象层(将数据库记录映射到 Python 对象),而不是为了性能。 Django 会很快窒息尝试构建数以亿计的对象,因为它不了解您要实现的目标。

相反,您需要使用适合您要进行的查询类型的数据库类型/引擎;如果一个典型的查询由一百个点查询组成以获取特定“单元格”中的数据,那么键值存储可能是理想的;如果您通常在单个“行”或“列”中提取值范围,那么这是需要优化的;如果您的查询通常涉及获取子矩阵并对它们执行可预测的操作,那么您可以通过预先计算某些累积值来显着提高性能;如果你想使用完整的数据集来训练机器学习模型,你可能最好不要使用数据库作为你的主存储(因为数据库本质上牺牲了快速检索完整原始数据的速度-calculations-on-interesting-subsets),特别是如果您的 ML 模型可以使用 Spark 之类的东西进行并行化。

没有数据库能很好地处理所有事情,所以如果您能详细说明您将在该数据之上运行的工作负载——您想问的那种问题?

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2011-05-27
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多