我想将具有浮点值的75000x10000矩阵有效地写入数据库

时间:2019-06-17 14:39:08

标签: python sql django pandas bigdata

感谢您听到我的声音。

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

尝试过使用熊猫分块 将文件读入python,并将其转换为成对的成对索引数据,然后将其写到json文件中。但是这种方法消耗了我的计算成本。对于100x10000大小的块,它将生成200 MB的json文件。

此json文件将用作在Django后端中形成SQLite数据库的装置。

有更好的方法吗?更快/更智能的方式。 我不认为要花整整一天写出的90 GB奇数json文件。甚至不确定Django数据库是否可以承担此负载。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

SQLite的确令人印象深刻,但它可能不会为您提供如此规模的性能,因此,即使您现有的项目是基于SQLite的Django,我还是建议您为该代码编写Python包装器不同的数据后端,而只是在Django中使用它。

更重要的是,不要为此类使用Django模型;它们是为方便起见而构建的抽象层(将数据库记录映射到Python对象),而不是为了提高性能。 Django会因为无法理解您要实现的目标而迅速尝试构建亿万个对象。

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

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