2014-10-17 3 views
0

Недавно я начал рассматривать CouchDB для хранения большого списка dicts, который я манипулирую в Python. Большой в моем случае означает около 20 тыс. Элементов.объемный поиск в CouchDB?

Я узнал, что метод update() очень быстрый, выталкивая весь список в один HTTP-вызов. Это занимает около 3 секунд, что идеально подходит для моего дела.

Мне также нужно (в другом скрипте) получить весь контент этой базы данных и сохранить его в списке dicts. Это противоположная операция с приведенной выше. К сожалению, единственный способ, которым я нашел, чтобы сделать это через

# db is the database opened following a couchdb.Server() call 
mylist = list() 
for id in db: 
    mylist.append(db[id]) 

Это занимает 10 минут, так как есть вызов для каждого элемента контура.

  • Есть ли эквивалент update() для массового получения содержимого базы данных?
  • или я должен подойти к извлекающей части другим, более эффективным способом?
+0

Предоставленный ответ совершенен, я нашел в то же время дубликат и отметит мой вопрос (стиль самопотока) – WoJ

+0

Возможный дубликат [Несколько документов CouchDB с помощью couchdb-python] (http://stackoverflow.com/ вопросы/1640054/multiple-couchdb-document-fetch-with-couchdb-python) – WoJ

ответ

0

Самый простой способ получить каждый документ должен выдать запрос на _all_docs и передать include_docs=true.

_all_docs получит основные сведения (_id, revision) всех документов в базе данных. include_docs приводит к включению полных документов в ответ.

/mydatabase/_all_docs?include_docs=true 

Если вам нужно что-то более тонкое, чем возвращение целых документов (например, возвращающая одно значение скалярной для каждого документа), то вы должны смотреть в views.

+0

Говоря в контексте couchdb-python, вам нужно вызвать 'db.view (" _ all_docs ", include_docs = True)' или лучше 'db. iter_view ("all_docs", 100, include_docs = True) ', чтобы не сбой с ошибкой OOM, так как этот вызов вернет вам в основном целые данные базы данных. – Kxepal

Смежные вопросы