2017-02-13 5 views
0

Я работаю над couchdb с nodejs, где у меня есть требование, когда мой документ добавляется один раз и только один раз. Я думаю, что в моем документе нет необходимости в теге _rev. Поскольку значение _rev длинное, а мои данные очень маленькие, он добавляет большие накладные расходы и, наконец, большой размер документа. Я знаю, что это очень неотъемлемая часть couchdb, но в некоторых типичных случаях она становится излишней. ПРИМЕЧАНИЕ. Я также знаю, что couchDB использует Multi-Version Concurrency Control (MVCC).Могу ли я избежать «_rev» из моей записи couchDB, потому что мой документ не изменится?

  1. Есть ли способ удалить это из документа?
  2. Я пропустил что-то критическое, которое может создать проблему позже?
  3. Если этого не избежать, по крайней мере, можно уменьшить значение очень мало?

Моя точка здесь короче:

я могу иметь запись как

"_ID": "001" "значение": "12"

"_ID": «002 «„значение“:» 23"

где нет такого значения, как „_rev“: „1-8b0b70974c6dd43edf4e07f12a9655af“

ответ

1

Если вы не хотите _rev свойство передается при загрузке документа, вы всегда можете использовать show function для преобразования JSON вашего документа, чтобы исключить это свойство:

function (doc, req) { 
    delete(doc._rev) 
    return { json: doc } 
} 

Это означает, что вы должны использовать show function API вместо извлечения документа напрямую, но вы можете используйте этот подход для применения других оптимизированных для домена оптимизаций.

+0

Спасибо за ответ. Но я беспокоюсь о том, что это дисковое пространство на сервере. так как есть миллионы документов, поэтому кумулятивный размер намного больше. Но этот ответ на один шаг ближе к моему решению. Еще раз спасибо. – Devidas

+0

Какое пространство на диске связано с функцией show? Он запускается на вашем документе, поскольку он отправляется клиенту, а не хранится на диске, как вид. –

+0

Привет Доминик, я думаю, что ошибался в моем вышеприведенном комментарии. Поэтому мое беспокойство касалось дискового пространства, используемого в документе базы данных из-за двух полей _id, и _rev мне нужно найти способ решить эту проблему. У меня есть 10 символов (байтов) полезной нагрузки с 32 символами _id и 32 символами _rev, что много по сравнению с моими данными. Поэтому я не беспокоился о передаче моих данных на внешний сервер, но я пытаюсь сохранить дисковое пространство из-за этих накладных расходов на _rev по крайней мере на данный момент. – Devidas

1

Невозможно отключить изменения в CouchDB. Изменения являются неотъемлемой частью базы данных. Если вы уверены, что не хотите их, вы можете использовать какую-то другую базу данных, но если вы будете использовать Mongo, то она будет хранить ревизии. Но посмотрите на это так: если у вас есть требование, чтобы ваши документы никогда не менялись, то как вы собираетесь это гарантировать? Изменения выглядят как идеальная функция, чтобы убедиться, что ваши документы никогда не меняются. Не только потому, что вы можете их прочитать, но и потому, что, если вы никогда не используете их, вы не сможете обновить какой-либо документ, для которого необходима предыдущая ревизия для обновлений.

+0

Да, сэр, но нет никаких шансов, что он может быть изменен чем-то. и если это неотъемлемая часть, вы можете помочь мне, по крайней мере, уменьшить ее размер? – Devidas