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

时间:2011-10-29 15:40:57

标签: python sql database

我想对一些文字进行分类。所以我必须将它与其他文本进行比较。将文本表示为向量后,如何将它们(非常大的浮点值列表)存储到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 个答案:

答案 0 :(得分:1)

您可能会发现pickle和数据库不能很好地协同工作。

Python的pickle用于将Python对象序列化为一种格式,然后可以通过Python将其读回Python对象。尽管使用pickle序列化非常容易,但您无法*查询此序列化格式,您无法*将其读入另一种语言的程序中。查看另一个Python模块cPickle,以便更快地pickle - 。

另一方面,数据库非常适合以可查询和非语言特定的方式保存数据 。但是成本是通常更难将数据输入数据库/从数据库输入数据。这就是为什么有像SQL Alchemy这样的特殊工具,以及关于对象关系映射软件的好处/恐怖的无休止的博客辩论。

Pickle - 对象,然后将它们发送到MySQL或SQL Server等数据库可能不是一个好主意。但是,请查看shelve,另一个Python模块,用于Python对象的类数据库持久性。

所以,总结一下:

  • 使用pickleshelve如果您只需要保存数据以供以后Python程序使用
  • 如果要将数据保留为一般用途,请将对象映射到数据库,并了解这需要更多工作量
  • 在性能方面,cPickle可能会胜过数据库+对象/关系映射

*:至少,不是没有很多努力和/或特殊的库。