用Python将大向量存储到数据库的最佳方法是什么?

2 投票
1 回答
2831 浏览
提问于 2025-04-17 05:14

我想对一些文本进行分类,所以需要把它们和其他文本进行比较。在把文本转换成向量(就是一大堆浮点数的列表)之后,我该怎么把它们存储到SQL数据库里,以便以后使用呢?

我想到了使用pickle模块:

vector=text_to_vector(text)
present=pickle.dumps(big_list)
some_db.save(text_id,present)

#later
present=some_db.get(text_id)
vector=pickle.loads(present)

如果我有成千上万的文本,这样做快吗?有效吗?

1 个回答

2

你可能会发现,pickle 和数据库的配合不是特别好。

Python 的 pickle 是用来把 Python 对象转换成一种格式,这样就可以再把它读回到 Python 对象中。虽然用 pickle 转换很简单,但你不能*查询这种转换后的格式,也不能*在其他语言的程序中读取它。你可以看看 cPickle,这是另一个 Python 模块,可以更快地进行 pickle 操作。

而数据库则很适合以一种可以查询且不依赖于特定语言的方式来保存数据。不过,代价是通常从数据库中获取或存入数据会比较麻烦。这就是为什么有像 SQL Alchemy 这样的特殊工具,以及关于对象关系映射软件的好处和坏处的无尽讨论。

把对象用 pickle 转换后再发送到像 MySQL 或 SQL Server 这样的数据库,可能不是个好主意。不过,你可以看看 shelve,这是另一个 Python 模块,可以实现类似数据库的 Python 对象持久化。

所以,总结一下:

  • 如果你只是想把数据保存起来,以便以后在 Python 程序中使用,可以用 pickleshelve
  • 如果你想把数据保存得更通用一些,方便大家使用,就要把对象映射到数据库,但要明白这需要更多的努力
  • 从性能上看,cPickle 可能会比数据库加对象关系映射更快

*:至少,不用很多努力和/或特殊库的话,是不行的。

撰写回答