2014-12-07 7 views
0

Я просто ищу простейший эквивалент того, что обычно берет shasum из содержимого двух файлов. Я не хочу сравнивать каждую деталь через eval функции, как этот пост предполагает: функциональность How to compare 2 mongodb collections?Убедитесь, что две коллекции Mongodb идентичны

Sharding/Репликация MongoDB уже должен иметь эффективный метод встроенный для этого, но я не см. запись в документе о том, как можно получить доступ к этому для целей сравнения.

+0

a) Включает ли это объекты ObjectIds или только фактические данные? б) Какая часть в репликации (с использованием Oplog) или осколки (маршрутизация монго на основе ключа осколка) потребует сравнения коллекций? – xeraa

+0

. В моем конкретном случае использования расширенные изменения кода для нескольких модулей синтаксического анализа, которые я бы хотел проверить, будут производить те же коллекции, что и модули в основной ветке, когда они запускаются через набор данных. – user3467349

ответ

7

Функциональные возможности Sharding/Replication от Mongodb должны иметь встроенный эффективный метод, но я не вижу записи doc о том, как можно получить доступ к этому для целей сравнения.

Репликация основана на idempotent operation log (oplog) и не требует вычисления контрольных сумм по коллекциям. В руководстве MongoDB подробно рассматриваются replication synchronization, включая начальную синхронизацию и текущее поведение репликации.

внутреннийdbHash command используемый sharding для расчета контрольной суммы md5 всех коллекций в базе данных. Он предназначен для проверки согласованности коллекций в базируемых конфигурациях кластерных кластеров, но может использоваться для вычисления сумм md5 для любой базы данных.

ПРИМЕЧАНИЕ: команда dbHash явно не является частью стабильной клиентской стороне API, поэтому реализация/API может быть изменена без предварительного уведомления между MongoDB высвобождает.

Поскольку эта команда выполняет итерацию всех документов во всех коллекциях для выбранной базы данных, вы должны проявлять осторожность при работе в больших базах данных или в производственной базе данных (особенно если ваш набор данных больше, чем ОЗУ). Чтение большого количества документов может привести к временному поиску полезных данных/индексов из вашего рабочего набора в памяти.

Вывод команды будет выглядеть примерно следующим образом:

> db.runCommand('dbHash') 
{ 
    "numCollections": 2, 
    "host": "nibbler.local", 
    "collections": { 
    "foo1": "adf5db735ce0ac74c35a561675614676", 
    "foo2": "adf5db735ce0ac74c35a561675614676", 
    "foo3": "26e01a5da467064790a61108170a3b5c" 
    }, 
    "md5": "f8f53a3cde773a61f5b4ccf4c3d99e07", 
    "timeMillis": 0, 
    "fromCache": [ ], 
    "ok": 1 
} 

В этом примере foo1 и foo2 коллекции имеют одинаковые md5 суммы, в то время как foo3 различен.

+0

Спасибо за проницательный ответ. – user3467349