Рефакторинг EAV смоделированных данных с динамическими таблицами - PullRequest
0 голосов
/ 14 февраля 2012

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

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

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


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

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


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

Может кто-нибудь:

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

Ура, ребята!

1 Ответ

1 голос
/ 03 марта 2012

Тогда отвечаю на мой вопрос.

Воспользовавшись советом Чарльза, я исследовал несколько вариантов NoSQL Document DB и в конечном итоге остановился на MongoDB.

Он отлично подходит для данных, которые я пытаюсь сохранить, и с ним очень легко работать.

...