我想把一个75000x1000的带有浮点值的矩阵有效地写入数据库

2024-05-20 02:03:38 发布

您现在位置:Python中文网/ 问答频道 /正文

谢谢你听我说完。你知道吗

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

我尝试使用pandas chunking将文件读入python,并将其转换为未堆叠的成对索引数据,然后将其写入json文件。但是这个方法消耗了我的计算成本。对于大小为100x10000的块,它生成一个200mbjson文件。你知道吗

这个json文件将被用作一个fixture,在Django后端形成SQLite数据库。你知道吗

有没有更好的办法?更快/更聪明的方式。我不认为用一整天的时间编写一个90 GB的json文件是可行的。甚至不确定Django数据库是否可以承受这个负载。

感谢您的帮助!你知道吗


Tags: 文件数据项目django数据库jsonpandassqlite
1条回答
网友
1楼 · 发布于 2024-05-20 02:03:38

SQLite给人留下了深刻的印象,但它可能不会给您在这个规模上所期望的性能,所以即使您现有的项目是SQLite上的Django,我还是建议您为不同的数据后端编写一个Python包装器,并从Django内部使用它。你知道吗

更重要的是,忘记使用Django模型来实现类似的功能;它们是为方便而构建的抽象层(将数据库记录映射到Python对象),而不是为了性能。Django很快就会在尝试构建上亿个对象时窒息,因为它不理解您要实现的目标。你知道吗

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

没有数据库能够很好地处理所有的事情,所以如果您能够详细说明在这些数据上运行的工作负载,这将是非常有用的—您想问什么样的问题?你知道吗

相关问题 更多 >