RavenDb против CouchDb в подходах к управлению памятью - PullRequest
3 голосов
/ 01 августа 2011

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

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

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

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

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

1 Ответ

2 голосов
/ 01 августа 2011

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

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

...