Я использую рельсы и имею следующий сценарий: у пользователей есть несколько списков, и каждый список содержит несколько слов, каждое из которых имеет собственное определение. В окне просмотра списка показаны все слова с разбивкой по кратным 30. Я обеспокоен тем, что список b/ca может вырасти до более 4000 слов, и похоже, что это будет дорого стоить для базы данных, если она должна быть упорядочена, если список нужно заказать в алфавитном порядке. Мне интересно, какой самый быстрый способ сделать это. Может быть, добавить индекс в слово?
Я рассмотрел сохранение строки в списке, содержащей все слова в списке, разделенные пробелом. Затем я мог бы сделать разделение ("") на этой строке и использовать разбиение на страницы в этом массиве, но тогда мне нужно использовать регулярные выражения для добавления и удаления слов из этого списка вместе с сохранением объекта word.
Я также рассмотрел какое-то хранилище с ключевыми значениями, такое как шкаф tokyo. Похоже, что индекс B-Tree может работать.
Индекс это! Это, безусловно, лучший вариант, и, как сказал Марк Томас, он даст вам 30 последовательных слов так же быстро, как он даст вам первые 30. Просто введите :order
и :limit
, и вы "Хорошо идти - или, еще лучше, пусть плагин, например will_paginate, сделает все для вас.
Строка слов - довольно беспорядочный подход - вам нужно будет перестроить строку каждый раз, когда вы добавляете или удаляете слова, а поиск работы должен использовать медленные функции сравнения, такие как LIKE
или REGEX
.
Токио (теперь Киото) Кабинет не может быть достаточно универсальным для того, что вам нужно - он утверждает, что это хранилище ключей → значение, и вам может потребоваться несколько ключей → значение, которое я не уверен, что он поддерживает. Кроме того, зачем добавлять еще одну БД, когда у вас уже есть?
tl; dr INDEX!
Надеюсь, это поможет!