Каков наилучший способ сохранить большой вектор в базе данных с помощью python?

#python #sql #database

#python #sql #База данных

Вопрос:

Я хочу классифицировать некоторый текст. Поэтому я должен сравнить его с другими текстами. После представления текстов в виде векторов, как я могу сохранить их (очень большие списки значений с плавающей запятой) в базе данных 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. ДА. Что еще, если не база данных?

Ответ №1:

Вы можете обнаружить, что pickle и базы данных не слишком хорошо работают вместе.

Python pickle предназначен для сериализации объектов Python в формат, который затем может быть прочитан обратно в объекты Python с помощью Python. Хотя сериализовать его очень легко pickle , вы не можете * запросить этот сериализованный формат, вы не можете * прочитать его в программе на другом языке. Проверьте cPickle, другой модуль Python, для ускорения pickle .

Базы данных, с другой стороны, отлично подходят для сохранения данных таким образом, чтобы они были доступны для запросов и не зависели от языка. Но стоимость заключается в том, что обычно сложнее получать / помещать данные в / из базы данных. Вот почему существуют специальные инструменты, такие как SQL Alchemy, и бесконечные дебаты в блогах о преимуществах / ужасах программного обеспечения для сопоставления объектных отношений.

Pickle редактирование объектов, а затем отправка их в базу данных, такую как MySQL или SQL Server, вероятно, не очень хорошая идея. Однако ознакомьтесь с shelve, другим модулем Python для сохранения объектов Python, подобных базе данных.

Итак, подводя итог:

  • используйте pickle или shelve , если вам просто нужно сохранить данные для последующего использования программой Python
  • сопоставьте объекты с базой данных, если вы хотите сохранить данные для общего использования, понимая, что это требует больше усилий
  • с точки зрения производительности, cPickle вероятно, выиграет сопоставление базы данных объекта / отношения

*: по крайней мере, не без больших усилий и / или специальных библиотек.