2016-07-20 4 views
1

У меня возникли проблемы с сопоставлением моего мастера и моих данных репликации для программной проверки работоспособности. Я бы ожидал, что следующее ответит тем же счетом и на моего хозяина, и на моего репликанта. Для некоторых коллекций это не так.Arangodb сравнить репликант и мастер

curl -s -X POST --data-binary @- --dump - ${ARANGO_DB_ADDRESS}/_db/dbname/_api/export?collection=collection_name <<EOF 
{"count":true} 
EOF 

Я не понимаю, что делает этот вызов API? Есть ли более простой способ сделать это? Я попытался использовать arangodump обоих, но различия довольно экстремальные.

+0

Эта версия ArangoDB вы используете? Вероятно, вы знаете, что последовательность документов не гарантируется, поэтому вы не сможете напрямую сравнивать дампы мастера и его реплики. – dothebart

+0

2.8.11 - Я согласен, что заказ не может быть гарантирован, но не должен совпадать? @dothebart – Fiala

ответ

0

Лучший способ проверить состояние репликации - сначала выдать db.collection.count(), а затем более точный db.collection.checksum(). Они также могут быть выданы с помощью этих локон вызовов:

Количество:

curl http://127.0.0.1:8529/_db/_system/_api/collection/test/count 
{"id":"26724522","name":"test","isSystem":false,"doCompact":true, 
"isVolatile":false,"journalSize":33554432, 
"keyOptions":{ 
    "type":"traditional","allowUserKeys":true}, 
"waitForSync":false,"indexBuckets":8,"count":40000,"status":3, 
"type":2,"error":false,"code":200} 

Контрольная сумма:

curl http://127.0.0.1:8529/_db/_system/_api/collection/test/checksum 
{"id":"26724522","name":"test","isSystem":false, 
"status":3,"type":2,"checksum":1808041899,"revision":"7926623225", 
"error":false,"code":200} 

Что касается export -API, они на зависимого от состояния сервера. Документы постоянно записываются в WAL-файлы при создании. Файлы WAL используются, поэтому у вас нет распределенных записей на ваших дисках, что может нанести ущерб производительности. Затем документы будут перенесены в их файлы коллекции. Чтобы гарантировать, что экспорт не повредит производительности сервера, экспортируются только документы внутри файлов коллекции. Таким образом, количество документов может быть различным в зависимости от состояния объекта коллектора.

Самый надежный способ получить синхронизацию в состоянии async - это вставить документы в ведомое устройство. Если уж сложилось, что вы можете вернуться в нормальное состояние путем выдачи:

r.applier.stop() 
r.syncCollection("myCollection", {endpoint: "tcp://127.0.0.1:8529"}) 
r.applier.start() 

Однако изменения в раба будут потеряны.