Я думаю, что я понимаю, что осколки - это возврат ваших нарезанных данных (осколков) в простое для работы с агрегатом, что имеет смысл в контексте. Это верно?
Обновление : я думаю, я борюсь здесь. По моему мнению, уровень приложений не должен определять, где должны храниться данные. В лучшем случае это должен быть осколочный клиент. Оба ответа ответили на вопрос «что, но не почему?». Какие последствия это имеет помимо очевидного прироста производительности? Достаточно ли этих усилений для компенсации нарушения MVC? Черепок является наиболее важным в приложениях очень большого масштаба или он применяется в более мелких приложениях?
database
terminology
ojblass
источник
источник
Ответы:
Sharding - это еще одно название для «горизонтального разделения» базы данных. Возможно, вы захотите найти этот термин, чтобы прояснить его.
Из Википедии :
Еще немного информации о шардинге:
Обновление: Вы не сломаете MVC. Работа по определению правильного шарда, в котором будут храниться данные, будет прозрачно выполняться вашим уровнем доступа к данным. Там вам нужно будет определить правильный шард на основе критериев, которые вы использовали для шардирования вашей базы данных. (Поскольку вы должны вручную разделить базу данных на несколько различных сегментов на основе конкретных аспектов вашего приложения.) Затем вы должны позаботиться о загрузке и сохранении данных из / в базу данных, чтобы использовать правильный фрагмент.
Возможно, этот пример с кодом Java проясняет (о проекте Hibernate Shards ), как это будет работать в реальном сценарии.
Для решения вопроса «
why sharding
»: это в основном только для очень крупных приложений с большим количеством данных. Во-первых, это помогает минимизировать время отклика для запросов к базе данных. Во-вторых, вы можете использовать более дешевые машины более низкого уровня для размещения ваших данных вместо одного большого сервера, которого может уже не хватить.источник
Если у вас есть запросы к СУБД, для которых локальность довольно ограничена (скажем, пользователь только запускает селекторы с «где username = $ my_username»), имеет смысл поместить все имена пользователей, начинающиеся с AM, на один сервер и все из NZ с другой. Таким образом, вы получаете почти линейное масштабирование для некоторых запросов.
Короче говоря : шардинг - это в основном процесс распределения таблиц на разные серверы, чтобы равномерно распределить нагрузку на оба сервера.
Конечно, в реальности все намного сложнее. :)
источник
Разделение - это горизонтальное (по строкам ) разделение базы данных, а не вертикальное (по столбцам ), что является нормализацией . Он разделяет очень большие базы данных на более мелкие, более быстрые и более легко управляемые части, называемые сегментами данных. Это механизм для достижения распределенных систем.
Зачем нам нужны распределенные системы?
Вы можете прочитать больше здесь: Преимущества распределенной базы данных
Как шардинг поможет добиться распределенной системы?
Вы можете разделить поисковый индекс на N разделов и загрузить каждый индекс на отдельный сервер. Если вы запросите один сервер, вы получите 1 / Nth результатов. Таким образом, чтобы получить полный набор результатов, типичная распределенная поисковая система использует агрегатор, который будет накапливать результаты с каждого сервера и объединять их. Агрегатор также распространяет запрос на каждый сервер. Эта агрегаторная программа называется MapReduce в терминологии больших данных. Другими словами, распределенные системы = Sharding + MapReduce (хотя есть и другие вещи).
Визуальное представление ниже.
источник
Разделение является проблемой тогда и только тогда, когда ваши потребности превзойдут то, что может обслуживать один сервер базы данных. Это отличный инструмент, если у вас есть надежные данные и у вас невероятно высокие требования к масштабируемости и производительности. Я предполагаю, что за все 12 лет, что я был профессионалом в области программного обеспечения, я столкнулся с одной ситуацией, которая могла бы выиграть от шардинга. Это продвинутая техника с очень ограниченной применимостью.
Кроме того, будущее, вероятно, будет чем-то веселым и захватывающим, как массивное объектное «облако», которое стирает все потенциальные ограничения производительности, верно? :)
источник
Изначально Sharding был придуман инженерами Google, и вы можете видеть, что он довольно активно использовался при написании приложений на Google App Engine. Поскольку существуют жесткие ограничения на количество ресурсов, которые могут использоваться вашими запросами, и поскольку сами запросы имеют строгие ограничения, разделение не только поощряется, но и почти полностью обеспечивается архитектурой.
Еще одно место, где можно использовать сегрегацию, - это уменьшить конкуренцию за объекты данных. При создании масштабируемых систем особенно важно следить за частями записи, которые часто записываются, потому что они всегда являются узким местом. Хорошее решение состоит в том, чтобы отделить эту конкретную сущность и записать ее в несколько копий, а затем прочитать итоги. Примером этого «защищенного счетчика по отношению к GAE: http://code.google.com/appengine/articles/sharding_counters.html
источник
Sharding делает больше, чем просто горизонтальное разбиение. Согласно статье в Википедии ,
Также,
источник
Это хорошее правило, но, как и большинство вещей, это не всегда правильно.
Когда вы делаете свою архитектуру, вы начинаете с ответственности и сотрудничества. После того, как вы определили свою функциональную архитектуру, вы должны сбалансировать нефункциональные силы.
Если одним из этих нефункциональных факторов является огромная масштабируемость, вам придется адаптировать свою архитектуру для удовлетворения этой силы, даже если это означает, что ваша абстракция хранения данных теперь просачивается на уровень вашего приложения.
источник