Почему "соединения" уменьшают масштабируемость в крупномасштабной распределенной системе баз данных?

интересно, как и почему "join" уменьшает масштабируемость в крупномасштабной распределенной (реляционной) системе баз данных?

спасибо.

1 ответов


как общее соображение, значительные накладные расходы (например, вычисления не-потребителя) в распределенной системе которые представляют "когерентный" и "унифицированный" фасад.

просто рассмотрим эти факторы:

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

  • естественно, они должны общаться, чтобы координировать. Таким образом, существует сетевая болтовня между узлами, и эти задержки не являются незначительными.

  • вышеуказанные накладные расходы, в свою очередь, увеличивают среднее время обслуживания запросов и тем самым уменьшают доступность (с точки зрения емкости системы).

масштабируемость становится проблемой, поскольку ни один из вышеперечисленных не является O (1). В лучшем случае вы можете ожидать O(log n), и это может быть так же плохо, как O(n^2). Это делает чудеса для убийства масштабируемости (что по определению означает способность системы масштабироваться до большего количества узлов).

вышеизложенное является частью мотивации для систем noSQL, например, если не требуется координация между узлами для обслуживания запросов, то производительность значительно лучше. (Как вы можете видеть, это не магия - мы просто жертвуя системной корректностью ради производительности.)