динамические поля поиска, лучшие практики? - PullRequest
2 голосов
/ 12 мая 2010

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

И у меня есть сложный интерфейс поиска, который позволяет пользователю выполнять поиск по всем функциям (включая динамические), принадлежащим модели Lexicon.

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

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

Но представьте, что у меня есть 1 000 000 000 лексиконов, и если создать один динамический объект для каждого лексикона, это приведет к созданию 1 000 000 000 строк в модели DynamicField.

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

Есть ли лучшее решение для этой ситуации?

Какой путь мне выбрать?

  1. в поисках лучшего дизайна БД для динамических полей

  2. попытаться настроить mysql (добавить поля кэша, добавить индекс ...) с текущим дизайном БД

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

Другой идеей может быть использование MongoDB и MongoMapper , Thinking Sphinx или Solr . Вот Railscast о том, как использовать Mongo: http://railscasts.com/episodes/194-mongodb-and-mongomapper

1 голос
/ 12 мая 2010

Я думаю, что лучший способ сделать это - использовать пару имя / значение вместо динамических полей. Позвольте мне объяснить, используя шаблон проектирования EAV

Так что вместо того, чтобы иметь что-то вроде этого:

Table: MedicalRecords
<table>
  <tr>
    <th>Temperature in degrees Fahrenheit</th>
    <th>Presence of Cough</th>
    <th>Type of Cough</th>
    <th>Heart Rate in beats per minute</th>
    <th>Column X</th>
    <th>Column X + 1</th>
    <th>... Column N</th>
  </tr>
  <tr>
    <td>102</td>
    <td>True</td>
    <td>With phlegm, yellowish, streaks of blood</td>
    <td>98</td>
    <td>????</td>
    <td>????</td>
    <td>????</td>
  </tr>
</table>

Вы бы создали свой стол так:

Table: MedicalRecords
<table>
  <tr>
    <th>Name</th>
    <th>Value</th>
  </tr>
  <tr>
    <td>Temperature in degrees Fahrenheit</td>
    <td>102</td>
  </tr>
  <tr>
    <td>Presence of Cough</td>
    <td>True</td>
  </tr>
  <tr>
    <td>Type of Cough</td>
    <td>With phlegm, yellowish, streaks of blood</td>
  </tr>
  <tr>
    <td>Heart Rate in beats per minute</td>
    <td>98</td>
  </tr>
  <tr>
    <td>Column X</td>
    <td>????</td>
  </tr>
  <tr>
    <td>Column X + 1</td>
    <td>????</td>
  </tr>
  <tr>
    <td>... Column N</td>
    <td>????</td>
  </tr>
</table>

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

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