Почему CouchDB предназначен только для защиты от сбоев?
Когда я исследую долговечность couchDB, я обнаруживаю, что couchDB использует конструкцию, рассчитанную только на сбой, чтобы добиться долговечности. Но я не знаю, какова связь между только авариями и долговечностью.
2 ответа
Читая вики из CouchDB
Система размещения и принятия файлов CouchDB обладает всеми свойствами Atomic Consistent Isolated Durable (ACID). На диске CouchDB никогда не перезаписывает зафиксированные данные или связанные структуры, гарантируя, что файл базы данных всегда находится в согласованном состоянии. Это дизайн "только для сбоя", когда сервер CouchDB не проходит процесс завершения работы, он просто завершается.
Долговечность определяется тем фактом, что БД всегда находится в согласованном состоянии, а также тем, что структура БД доступна только для добавления (CouchDB never overwrites committed data or associated structures
). Это делает обработку ошибок довольно простой: она может мгновенно завершиться сбоем в случае ошибки.
Я не думаю, что это "только сбой", который дает долговечность. Я думаю, что долговечность позволяет использовать "только краш".
Делать обратное означало бы пытаться быть умным и добавить код восстановления после ошибки. Это требует от вас правильной идентификации ошибки и правильности ваших предположений об алгоритме восстановления. Каждая часть процесса восстановления может вносить ошибки. Вы можете подумать, что ошибка относится к определенному типу, когда она действительно другая, или могут возникать новые непредвиденные ошибки, когда вы уже выполняете восстановление.
Восстановление после ошибок также означает не только попытку повторить неудачную транзакцию. Вы также должны найти исходную ошибку, которая, вероятно, произошла из-за неожиданного состояния программы или оборудования, и исправить это состояние. В противном случае та же ошибка может произойти снова.
Только сбой снижает вероятность ошибок, вам не нужно находить все крайние случаи, когда что-то пошло не так, и ваш системный администратор может легко получить уведомление об ошибке (которая может быть аппаратной ошибкой!). Имея это в виду, что в некоторых случаях сбой только может быть разумным принципом разработки программного обеспечения. По крайней мере, это облегчает гарантию целостности ваших данных.