Хранение большого количества объектов, которые принадлежат списку

0

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

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

Я также рассмотрел какое-то хранилище с ключевыми значениями, такое как шкаф tokyo. Похоже, что индекс B-Tree может работать.

  • 0
    Да, используйте индекс. Тогда не дороже вернуть первую страницу тридцатой или сотой.
Теги:
b-tree
tokyo-cabinet

1 ответ

0
Лучший ответ

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

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

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

tl; dr INDEX!

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню