Хранение большого количества объектов, которые принадлежат списку - PullRequest
0 голосов
/ 25 января 2011

Я использую рельсы и у меня следующий сценарий: у пользователей есть списки have_many, и каждый список содержит несколько слов, каждое из которых имеет свое определение.В представлении списка отображаются все слова, разбитые на страницы, кратные 30. Я обеспокоен тем, что список b / ca может вырасти до 4000 слов, и кажется, что для базы данных разбиение на страницы будет слишком дорогим, если список нужно упорядочитьв алфавитном порядке.Мне интересно, какой самый быстрый способ сделать это.Может быть добавление индекса по слову?

Я рассмотрел сохранение строки в списке, которая содержит все слова в списке, разделенные пробелом.Затем я мог бы выполнить разбиение ("") для этой строки и использовать нумерацию страниц в этом массиве, но затем мне нужно использовать регулярные выражения для добавления и удаления слов из этого списка вместе со словом сохранения объекта.

Iтакже рассматривали что-то вроде магазина ключей-ценностей, например, токийский кабинет.Похоже, индекс B-Tree может работать.

1 Ответ

0 голосов
/ 11 февраля 2011

Индекс это!На данный момент это лучший вариант, и, как сказал Марк Томас, он даст вам любые 30 последовательных слов так же быстро, как и первые 30. Просто добавьте :order и :limit, и вывсе готово - или, что еще лучше, позвольте плагину типа will_paginate сделать все это за вас.

Строка слова - довольно грязный подход - вам придетсяперестраивать строку каждый раз, когда вы добавляете или удаляете слова, и при поиске работы придется использовать медленные функции сравнения, такие как LIKE или REGEX.

Токийский (теперь Киото) кабинет может быть недостаточно универсальным для того, чтонужно - он утверждает, что это ключ -> хранилище значений, и вам может понадобиться несколько ключей -> значение, которое я не уверен, что оно поддерживает.Кроме того, зачем добавлять еще одну БД, если она у вас уже есть?

tl; dr INDEX!

Надеюсь, это поможет!

...