gpt4 book ai didi

python - 将 Python NumPy 数组插入 PostgreSQL 数据库的最佳方法

转载 作者:行者123 更新时间:2023-12-04 04:27:23 26 4
gpt4 key购买 nike

我们的团队使用的软件严重依赖将 NumPy 数据转储到文件中,这大大降低了我们的代码速度。如果我们可以将 NumPy 数组直接存储在 PostgreSQL 中,我们将获得重大的性能提升。

欢迎使用其他在任何数据库或可搜索的类似数据库结构中存储 NumPy 数组的高性能方法,但最好使用 PostgresSQL。

My question is very similar to one asked previously.但是,我正在寻找一个更强大、更高效的答案,我希望存储任何任意 NumPy 数组。

最佳答案

不确定这是否是您所追求的,但假设您具有对现有 postgres 数据库的读/写访问权限:

import numpy as np
import psycopg2 as psy
import pickle

db_connect_kwargs = {
'dbname': '<YOUR_DBNAME>',
'user': '<YOUR_USRNAME>',
'password': '<YOUR_PWD>',
'host': '<HOST>',
'port': '<PORT>'
}

connection = psy.connect(**db_connect_kwargs)
connection.set_session(autocommit=True)
cursor = connection.cursor()

cursor.execute(
"""
DROP TABLE IF EXISTS numpy_arrays;
CREATE TABLE numpy_arrays (
uuid VARCHAR PRIMARY KEY,
np_array_bytes BYTEA
)
"""
)

这种方法的要点是将任何 numpy 数组(任意形状和数据类型)作为一行存储在 numpy_arrays 中。表,其中 uuid是一个唯一标识符,以便以后能够检索数组。实际数组将保存在 np_array_bytes 中列作为字节。

插入数据库:
some_array = np.random.rand(1500,550)
some_array_uuid = 'some_array'

cursor.execute(
"""
INSERT INTO numpy_arrays(uuid, np_array_bytes)
VALUES (%s, %s)
""",
(some_array_uuid, pickle.dumps(some_array))
)

从数据库查询:
uuid = 'some_array'
cursor.execute(
"""
SELECT np_array_bytes
FROM numpy_arrays
WHERE uuid=%s
""",
(uuid,)
)
some_array = pickle.loads(cursor.fetchone()[0])

表现?

If we could store our NumPy arrays directly in PostgreSQL we would get a major performance boost.



我没有以任何方式对这种方法进行基准测试,所以我无法确认或反驳这一点......

磁盘空间?

我的猜测是这种方法占用的磁盘空间与使用 np.save('some_array.npy', some_array) 将数组转储到文件中一样多。 .如果这是一个问题,请考虑在插入之前压缩字节。

关于python - 将 Python NumPy 数组插入 PostgreSQL 数据库的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60278766/

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