MySQL Partitioning / Sharding / Splitting - какой путь?

Вероятно, это комментарий к сообщению @ Cumbayah, но я не могу оставлять комментарии ни о чем.

Возможно, вам лучше использовать что-то вроде этого вместо того, чтобы использовать XmlReader для получения nametable .

var xml = ... XML from your post ...;
var myXDocument = XDocument.Parse(xml);
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("prefix", "http://www.MyNamespace.ca/MyPath");

var result = ...;
48
задан sme 18 January 2016 в 15:07
поделиться

7 ответов

Если Вы думаете, что собираетесь быть связанным IO/memory, я не думаю, деля, будет полезным. Как обычно, сравнительное тестирование сначала поможет Вам выяснить лучшее направление. Если у Вас нет запасных серверов с 64 ГБ памяти перебрасывающимися, можно всегда просить у поставщика 'демонстрационную единицу'.

я склонился бы к sharding, если Вы не ожидаете 1 создание отчетов агрегата запроса. Я предполагаю, что Вы были бы черепок целая база данных и не только Ваша большая таблица: лучше держать все объекты вместе. Ну, если Ваша модель разделяет приятно, так или иначе.

9
ответ дан Gary Richardson 18 January 2016 в 15:07
поделиться

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

1
ответ дан VanOrman 18 January 2016 в 15:07
поделиться

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

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

Независимо от того, что Вы делаете, не реализуйте его сами. Позвольте системе баз данных обработать его.

0
ответ дан Joel Coehoorn 18 January 2016 в 15:07
поделиться
  • 1
    @KevinRave Да, потому что входной массив к вызову имеет ту же проблему. Попытайтесь получить доступ $arr[207] в любом массиве, в котором Вы являетесь передающими как первый аргумент array_diff_key и you' ll видят ту же самую проблему. Необходимо зафиксировать источник проблемы, которая будет от кастинга объекта к массиву в какой-то момент с помощью чего-то как: $array = (array)$obj; – Paulpro 19 June 2012 в 03:44

Что делает большая таблица.

, Если Вы собираетесь разделить его, у Вас есть несколько опций:
- Разделение это с помощью системы баз данных (не знают много о том)
- Разделение это строкой.
- разделяет его столбцом.

Разделение строкой только было бы возможно, если Ваши данные могут быть разделены легко в блоки. например, Что-то как Basecamp имеет несколько учетных записей, которые являются абсолютно отдельными. Вы могли сохранить 50% учетных записей в одной таблице и 50% в различной таблице на различной машине.

Разделение Столбцом хорошо для ситуаций, где размер строки содержит поля крупного текста или БЛОБЫ. Если у Вас есть таблица с (например), пользовательским изображением и огромным блоком текста, Вы могли обработать изображение в совершенно другую таблицу. (на различной машине)

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

0
ответ дан seanyboy 18 January 2016 в 15:07
поделиться
  • 1
    Я пытался изменить исходный массив. И попробованный несколько других вещей. Ничто не работало. Я закончил тем, что получил ключ/значение посредством foreach цикличного выполнения. Но это, кажется, ошибка.:-) – Kevin Rave 19 June 2012 в 20:36

, Как обычно, сравнивая сначала поможет Вам выяснить лучшее направление.

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

0
ответ дан sme 18 January 2016 в 15:07
поделиться
  • 1
    @KevinRave можно ли проверить, что у Вас есть та же проблема с Вашим исходным массивом? – Paulpro 19 June 2012 в 20:49

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

, НО

Все зависит от того, как Ваша база данных используется, действительно. Статистика.

0
ответ дан Seun Osewa 18 January 2016 в 15:07
поделиться
  • 1
    @KevinRave: $first = (array)json_decode('{"207":"sdf","210":"sdf"}',true); $output = array_diff($first, array());print_r($output);echo $output[207];echo $output["207"]; array_diff не является проблемой, решение все еще допустимо. Попытайтесь удалить истинное в предыдущем коде, у Вас есть своя ошибка. – regilero 10 July 2012 в 11:50

Вы определенно начнете сталкиваться с проблемами о той таблице на 42 ГБ, как только она больше не умещается в памяти. На самом деле, как только это больше не умещается в памяти, производительность ухудшится чрезвычайно быстро. Один способ протестировать состоит в том, чтобы поместить ту таблицу на другую машину с меньшим количеством RAM и видеть, как плохой это работает.

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

Это неправильно. Partioning (или через функцию в MySQL 5.1 или через то же самое с помощью таблиц MERGE) может обеспечить значительные выигрыши в производительности, даже если таблицы находятся на том же диске.

Как пример, скажем, что Вы выполняете Запросы Select на своей большой таблице с помощью диапазона дат. Если таблица будет цела, запрос будет вынужден просканировать через всю таблицу (и в том размере, даже использование индексов может быть медленным). Преимущество разделения состоит в том, что Ваши запросы будут только работать на разделах, где это абсолютно необходимо. Если каждый раздел составляет 1 ГБ в размере, и Ваш запрос только должен получить доступ к 5 разделам для выполнения себя, объединенная таблица на 5 ГБ намного легче для MySQL иметь дело с, чем версия монстра 42 ГБ.

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

я услышал, что существует все еще некоторая ошибочность с разделением MySQL 5.1, особенно связанным с MySQL, выбирая корректный ключ. Таблицы СЛИЯНИЯ могут обеспечить ту же функциональность, хотя они требуют немного больше служебного.

Hope, которая помогает... удачи!

25
ответ дан giltotherescue 18 January 2016 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: