Bezdepbonusu7Программирование: статьи и ответы

Вопрос

RavenDb против CouchDb в подходах к управлению памятью

Автор вопроса: jia93Ответов: 1

RavenDB (база данных хранилища .Net JSON с запросами) обеспечивает агрессивное управление кэшированием/памятью под своим собственным контролем (через собственный механизм хранения Munin) с параметрами конфигурации для настройки различных размеров кэша и т. д. Группы Google предполагают, что до (может не в случае с последними выпусками) случайные исключения нехватки памяти в результате ненастроенных параметров (с достаточным размером db/index).

CouchDB, похоже, использует другой подход и оставляет кэширование операционной системе. Это означает, что когда я ПОЛУЧАЮ /db1/doc-id-1, это важно с точки зрения программирования операции чтения файла в файловой системе, которую ОС может оптимизировать из-за своих собственных кешей. Точно так же я считаю, что это то же самое для представлений и результатов уменьшения (несколько частей дерева b требуют загрузки/вычисления с диска в зависимости от диапазона).

Последнее кажется мне лучше, ОС прошла годы эволюции в области кэширования / подкачки и т. Д., И давление со стороны других служб может сбалансировать память.

Во-первых. Я прав в своем понимании? Является ли подход CouchDB уникальным для операционных систем на базе Unix (хотя я вижу, что у них есть порт для Windows)? Есть ли причина, по которой .Net DB не может полагаться на ОС для оптимизации чтения файлов и т. д.? Каковы недостатки и преимущества каждого подхода, которые могут повлиять на выбор при создании хранилища данных?

Боковое примечание: я считаю, что Redis такой же, просто хранит индекс в памяти, каждый GET KEY - это попадание на диск (которое либо попадает в головки диска, либо не зависит от кэширования файлов ОС)

couchdbredisravendb

Ответы

Ответ 1 · рейтинг 2 · Ayende Rahien

Jia93, Одна из причин того, что мы работаем именно так, это то, что у нас более сильное разделение между слоями. В CouchDB почти такие же оптимизации, как и у нас (сохранение информации в памяти), но она делает это поверх структуры BTree, которая напрямую доступна приложению.

Еще одна причина кэширования результатов - избежать затрат на анализ json при каждом отдельном запросе.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы