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

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

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

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


person DavidP6    schedule 25.01.2011    source источник
comment
Да, используйте индекс. Тогда не дороже вернуть первую страницу тридцатую или сотую.   -  person Mark Thomas    schedule 25.01.2011


Ответы (1)


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

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

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

tl;dr ИНДЕКС!

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

person Xavier Holt    schedule 11.02.2011