Я согласен с @ThinkFloyd, когда он говорит: Удалить на сервере должен быть удалять на сервере, а не требует трех шагов, как получить данные с сервера, перебрать его на стороне клиента, и, наконец, для каждого снова удалите запись на сервере.
В этом отношении, я думаю, что старомодные РСУБД были лучше всего, что вам нужно сделать, это «УДАЛИТЬ» из базы данных, где что-то = что-то ».
К счастью, в CouchBase, называемом N1QL (произносится как nickle), есть что-то похожее на SQL. Я не знаю о JavaScript (и синтаксисе другого языка), но это то, как я это сделал в python.
запросы, которые будут использоваться: DELETE от <bucketname>
б где META (б) .id LIKE «%»
layer_name_prefix = cb_layer_key + "|" + "%"
query = ""
try:
query = N1QLQuery('DELETE from `test-feature` b where META(b).id LIKE $1', layer_name_prefix)
cb.n1ql_query(query).execute()
except CouchbaseError, e:
logger.exception(e)
Чтобы достичь того же: альтернативный запрос может быть как ниже, если вы хранящая «типа» и/или другие метаданные, такие как «parent_id».
УДАЛИТЬ ИЗ <bucket_name>
где type = 'Feature' и parent_id = 8;
Но я предпочитаю использовать первую версию запроса, поскольку он работает с ключом, и я считаю, что CouchBase должен иметь некоторые внутренние индексы, чтобы быстрее работать/запрашивать ключ (и другие метаданные).
Это означает, что мы получаем ключи навалом, но снова мы удаляем все объекты один за другим с помощью цикла.Если у меня есть 10000 + сущностей, то этот цикл for-loop будет бомбардировать сервер couchbase с помощью множества параллельных запросов вместо отправки всех ключей в списке и позволить couchbase удалять все из них внутри. Не будут ли эти многочисленные запросы влиять на другие запросы, которые увольняются приложением для других случаев использования? Не могу ли я УДАЛИТЬ использовать представления? – ThinkFloyd
Hey @ThinkFloyd, У вас есть веская забота, однако, что Couchbase Server работает так же эффективно, как и NodeJS, асинхронный, на самом деле это не проблема. Каждый удаляемый вами номер в NodeJS будет неблокироваться, поэтому прикладной уровень не будет заблокирован. Когда запрос удаления удаляется на Couchbase Server, документ затем помечен для удаления, а затем удаляется, когда происходит уплотнение. Вы не можете удалять данные напрямую. Я бы не стал слишком беспокоиться об этом, но дайте мне знать, если у вас возникнут дополнительные вопросы. Лучший, –
Можно ли удалить все объекты в ведро? Что-то вроде 'TRUNCATE Table XYZ'. Если это возможно, я могу объединить все свои ключи в одном ковше и продуть его, когда это необходимо. – ThinkFloyd