Правильный способ переноса документов в couchbase (API 1.4.x -> 2.0.x)
Я хотел бы перенести документы, сохраненные в couchbase через API 1.4.10, в новые документы, предоставляемые API 2.0.5, такие как JsonDocument. Я обнаружил, что есть возможность добавить пользовательские транскодеры в Bucket, поэтому при декодировании документов я могу проверить флаги и решить, какой именно транскодер мне следует использовать. Но мне кажется, что это не совсем хорошее решение. Есть ли другие способы сделать это должным образом? Благодарю.
Миграция может быть выполнена только во время выполнения по запросу пользователя, так как документов слишком много, мы не можем перенести их все сразу в фоновом режиме.
1 ответ
Вам не нужно использовать собственный транскодер для чтения документов, созданных с помощью 1.x SDK. Вместо этого используйте LegacyDocument
Тип для чтения (и записи) документов в устаревшем формате.
Что еще более важно, вы не должны продолжать работать со смесью устаревших и новых документов в базе данных очень долго. LegacyDocument
тип предоставляется для облегчения перехода от старого формата к новому SDK. В этом случае рекомендуется развернуть промежуточную версию приложения, которая пытается читать документы в одном формате, а затем пытается прочитать их в другом. Унаследовано от нового или наоборот, в зависимости от того, к какому типу документов обращаются чаще при первом обращении. После развертывания промежуточной версии вы должны запустить фоновую задачу, которая будет считывать и преобразовывать все документы из старого формата в новый. Это довольно просто: вы просто пытаетесь читать документы как LegacyDocument
и, если это удастся, вы сохраните документ обратно как JsonDocument
используя значение CAS, которое вы получили ранее. Если вы не можете прочитать документ как устаревший, значит, он уже в новом формате. Задача должна быть достаточно ограничена, чтобы не вызывать значительного увеличения нагрузки на базу данных. После завершения задачи удалите запасной код из приложения и просто прочитайте и напишите все как JsonDocument
,
Вы упомянули слишком много документов - сколько это? Таким образом, мы успешно перенесли наборы данных с несколькими миллиардами документов. Это, по общему признанию, заняло несколько дней, чтобы бежать. Если у вас есть база данных, которая больше этой или имеет очень низкий коэффициент резидентности, может быть нецелесообразно пытаться преобразовать все документы.