MongoDB рассчитать компромиссы производительности - PullRequest
0 голосов
/ 13 января 2012

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

Таким образом, я рассматриваю перемещение всех данных в 1 базу данных, и пусть у каждого документа есть поле "проекта", к которому я могу запросить.
Схема базы данных будет выглядеть примерно так:

Project1 (Database)
    Task (Collection)
        {name: my_task, status: Completed, ...}

Project2 (Database)
    Task (Collection)
        {name: other_task, status: Started, ...}

Что-то вроде:

SingleDatabase
    Task (Collection)
        {name: my_task, status: Completed, project: Project1, ...}
        {name: other_task, status: Started, project: Project2, ...}

Я предполагаю, что это может иметь некоторые компромиссы производительности с памятью, использованием диска и производительностью записи.
Проблема в том, что я понятия не имею, какбольшое влияние это оказало бы, если бы его вообще стоило делать.

Вопрос заключается в следующем:
Можно ли рассчитать, какое влияние это решение может оказать на сервер?
Что-то вроде: заданные коллекции X, документ X, индексы X ... Сервер будет включенв среднем есть: X / s медленнее записи, X требует больше памяти .. и так далее.

1 Ответ

2 голосов
/ 13 января 2012

Это очень теоретический вопрос, и «теория - плохой компаньон, когда дело доходит до производительности» .Даже если бы существовала непротиворечивая, устоявшаяся теория, она была бы чрезвычайно сложной, потому что вы должны учитывать кэширование (то есть операции имеют историю, нет обратимости во времени, нужны очень подробные шаблоны использования и т. Д.)множество нелинейных эффектов (большинство алгоритмов стремятся достичь некоторого поведения журнала ( n ) или n журнала ( n )) и разрывов в функции производительности'(если ваша оперативная память больше не может хранить индексы, начинается замена) и аппаратные особенности (замена на SSD на порядок быстрее, чем на шпиндели) и т. д.

Самый быстрый и самый быстрыйнадежный способ выяснить, как он себя ведет - это реализовать его. Эта реализация может быть ненадежной, хакерской, а что нет.Но вы можете получить хороший индикатор производительности через пару часов.

Некоторые теоретические данные:

По сути, использование нескольких баз данных похоже на сортировку сегментов: у вас есть некоторый код, который может быстро идентифицироватькакое ведро для запроса.В этих сегментах индексы немного меньше, следовательно, немного быстрее.С другой стороны, время поиска должно увеличиваться только логарифмически с увеличением размера индекса.Специально для больших коллекций это означает, что различий практически нет.

Дисковое пространство будет использоваться более эффективно (если вы не сильно изменили настройки базы данных), поскольку MongoDB выделит файл .ns размером 16 МБ ине менее 64 МБ файлов данных для каждой базы данных, даже если вы храните только несколько документов.Следовательно, если количество небольших баз данных велико, ваш объем дискового пространства должен быть лучше после миграции, несмотря на дополнительное поле.

Изменения в объеме ОЗУ должны быть незначительными, но память - такая сложная тема, что яне будет ставить ни копейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...