Лучший способ переместить строку данных в другой осколок? - PullRequest
2 голосов
/ 16 ноября 2008

Вопрос говорит сам за себя.

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

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

Я прав? Какой лучший способ сделать это? Можно ли использовать триггеры?

Я думал о том, чтобы не перемещать строку сразу, а только в конце дня / недели / месяца, но потом не было определено, в каком месте находится фрагмент с определенным флагом, и поиск должен выполняться всегда все осколки.

РЕДАКТИРОВАТЬ: Некоторые уточнения:

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 декабря 2010

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

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

  • Быстрый просмотр строки
  • Распределить ввод-вывод по всем экземплярам шарда.
  • Нет необходимости перемещать данные из одного шарда в другой (кроме случая, когда вы хотите увеличить количество шардов).
1 голос
/ 20 ноября 2008

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

Если вы используете триггеры (после / before_update / insert), это будет немедленное перемещение, другие методы приведут к тому, что в первом сегменте (активном) будут разные типы данных, пока он не будет очищен.

Я бы также предложил делать это по дате (например, ежемесячная работа, которая перемещает все, что неактивно и старше месяца, в другую «Архивную» базу данных).

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

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