2009-06-14 6 views
148

Я думаю, что я понимаю, что я собираюсь вернуть ваши нарезанные данные (осколки) в легкость справиться с совокупностью, которая имеет смысл в контексте. Это верно?Что такое осколки и почему это важно?

Обновление: Думаю, я борется здесь. По моему мнению, уровень приложения не должен определять бизнес, где должны храниться данные. В лучшем случае это должен быть какой-то осколочный клиент. Оба ответа отвечали на вопрос, но не почему это важный аспект. Какие последствия у него есть за пределами очевидного повышения производительности? Являются ли эти прибыли достаточными для компенсации нарушения MVC? Является ли ошпаривание главным образом важным в очень крупномасштабных приложениях или оно применяется к более мелким масштабам?

+1

Would один из этих вебинаров быть полезным http://vimeo.com/26742356 http://www.slideshare.net/rightscale/rightscale-webinar-scaling? -я ваша база данных в облаке http://vimeo.com/32541189 – 2012-01-31 20:27:42

ответ

140

Sharding - это еще одно название для «горизонтального разбиения» базы данных. Возможно, вы захотите найти этот термин, чтобы получить более четкое представление.

От Wikipedia:

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

Некоторые больше информации о шардинге:

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

Обновление: Вы не нарушите работу MVC. Работа по определению правильного осколка, где хранить данные, будет прозрачно выполняться с помощью вашего уровня доступа к данным. Там вам нужно будет определить правильный осколок, основанный на критериях, которые вы использовали для обхода вашей базы данных. (Так как вам нужно вручную очертить базу данных на несколько разных осколков, основываясь на некоторых конкретных аспектах вашего приложения.) Затем вам нужно позаботиться о загрузке и сохранении данных из/в базу данных, чтобы использовать правильный осколок.

Возможно, this example с кодом Java делает его несколько яснее (речь идет о проекте Hibernate Shards), как это будет работать в реальном мире.

Чтобы обратиться к «why sharding»: это в основном только для очень крупных приложений, с лотами данных. Во-первых, это помогает минимизировать время отклика для запросов к базе данных. Во-вторых, вы можете использовать более дешевые «нижние» машины для размещения ваших данных вместо одного большого сервера, чего может быть недостаточно.

+1

Простите меня, но не следует, чтобы база данных определяла, где хранить данные. Это влияет на код на уровне приложения? – ojblass

+4

Я уже давно пытаюсь понять, как он отличается от горизонтального разбиения, и ссылка в вашем ответе, похоже, доказывает, что нет никакой разницы. Как кто-то говорит в комментариях к сообщению Тео Шлосснагла: «... Если вы используете традиционную культуру базы данных, делая горизонтальное разбиение, если вы из веб-культуры, это« Sharding »...» – andreister

+0

@andreister Из того, что я Чтение, очертание концептуально отличается тем, что оно определяется горизонтальным масштабированием нескольких логических или физических узлов (в случае моего понимания (mySQL) нескольких баз данных, скорее всего, размещенных на разных логических аппаратных средствах). Горизонтальное разбиение является менее конкретным термином, из которых «Sharding» является подмножеством. Снова используя mySQL в качестве примера, раздел mySQL обрабатывается одним экземпляром db, который на 100% прозрачен для приложения. Подход, основанный на осколке, будет включать либо прокси, либо приложение, которое разумно выбрало бы этот экземпляр. – NateDSaint

26

Если у вас есть запросы к СУБД, для которых местность довольно ограничена (например, пользователь только запускает выбор с помощью «где username = $ my_username»), имеет смысл поставить все имена пользователей, начиная с AN на одном сервере и все из МЗ - с другой. При этом вы получите линейное масштабирование для некоторых запросов.

Short story short: Sharding - это в основном процесс распределения таблиц на разных серверах, чтобы сбалансировать нагрузку на одинаковые.

Конечно, в действительности это намного сложнее. :)

+0

Так что очертание влияет на дизайн данных, которые вы храните ... извините, если я не совсем понимаю. – ojblass

+1

Я добавил еще одно предложение сделать это яснее. – bayer

+0

Разве это не одно горизонтальное разбиение? – harunurhan

2

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

Sharding является проблемой в том и только в том случае, если ваши потребности масштабируются за счет того, что может обслуживать один сервер базы данных. Это инструмент для набухания, если у вас есть данные с шариками, и у вас невероятно высокая масштабируемость и требования к производительности. Я бы предположил, что за все 12 лет я был профессионалом в области программного обеспечения, я столкнулся с одной ситуацией, которая могла бы выиграть от осколков. Это продвинутая техника с очень ограниченной применимостью.

Кроме того, будущее, вероятно, будет чем-то забавным и захватывающим, как массивный объект «облако», который стирает все потенциальные ограничения производительности, не так ли? :)

1

На мой взгляд приложение уровня не должен иметь определяющего бизнес, где данные должны храниться

Это хорошее правило, но, как и большинство вещей, не всегда правильно.

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

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

+1

Уровень приложения может по-прежнему создавать разделение логики доступа к данным и бизнес-правил. Это означает, что у вас есть дополнительные концептуальные слои в слое «уровень приложения». – Eric

4

Sharding был первоначально придуман инженерами Google, и вы можете видеть, что он довольно сильно используется при написании приложений в Google App Engine. Поскольку существуют жесткие ограничения на количество ресурсов, которые могут использовать ваши запросы, а также потому, что сами запросы имеют строгие ограничения, оглавление не только поощряется, но и практически обеспечивается архитектурой.

Можно использовать другое очертание места, чтобы уменьшить количество конфликтов на объектах данных. Это особенно важно при создании масштабируемых систем, чтобы следить за теми частями данных, которые написаны часто, потому что они всегда являются узким местом. Хорошее решение состоит в том, чтобы очертить эту конкретную сущность и записать в многолистные копии, а затем прочитать общее количество. Примером этого «sharded счетчик WRT GAE: http://code.google.com/appengine/articles/sharding_counters.html

+2

<< Sharding был первоначально придуман инженерами Google >> - неправда. Google был основан в 1998 году. Scientar.google.com находит документы 1980-х годов, такие как «Отбрасывание устаревшей информации в реплицированной системе баз данных» ... Система для высокодоступных реплицированных данных (SHARD), разработанная в CCA ... Я помню, как слышали людей говоря тогда о том, чтобы окунуться. –

Смежные вопросы