Прежде всего все я знаю:
Преждевременная оптимизация является корнем всего зла
Но я думаю, что неправильное автоматическое заполнение может действительно аварийно завершить Ваш сайт.
Я был бы, чтобы знать, существуют ли какие-либо библиотеки там, которые могут сделать автоматическое заполнение эффективно (серверная сторона), которая предпочтительный может вписаться в RAM (для лучшей производительности). Так никакое browserside автоматическое заполнение JavaScript (yui/jquery/dojo). Я думаю, что существует достаточно темы об этом на stackoverflow. Но я не мог найти хороший поток об этом на stackoverflow (возможно, не выглядел достаточно хорошим).
Например, имена автоматического заполнения:
names:[alfred, miathe, .., ..]
Что я могу думать прочь:
SELECT name FROM users WHERE name LIKE al%
. http://localhost:8983/solr/terms?terms.fl=name&terms.sort=index&terms.prefix=al&wt=json&omitHeader=true
. То, что я хотел бы услышать, является реализацией, используемой сайтами и числами того, как хорошо она может обработать загрузку, предпочтительную с:
Большое спасибо,
Alfred
, к сожалению, разрешение этой проблемы будет сильно зависеть от данных, которые вы надеетесь на запрос.
Как запросы не станут слишком много нагрузки на вашу базу данных, если вы проводите время, используя «Объяснение» или профилировщик, чтобы показать вам, как планирует оптимизировать запрос для выполнения вашего запроса.
Некоторые основы, чтобы иметь в виду:
Индексы: Убедитесь, что у вас есть установка индексов. (Да, во многих случаях, как использует индексы. Существует отличная статья на тему в MyItforum. SQL Performance - индексы и тому подобное предложение ).
Присоединения: Убедитесь, что ваши соединения находятся на месте и оптимизированы планировщиком запроса. SQL Server Profiler может помочь с этим. Посмотрите на полный индекс или полную таблицу Scans
Авто-полные запросы - это особый случай, в том, что они обычно работают как постоянно уменьшающие подставки.
«Имя», как «A%»
(может вернуть 10000 записей) «Имя», как «AL%
» (может вернуть 500 записей) «Имя», как «ALA) «
(может вернуть 75 записей) « Имя », как« Alan% »
(может вернуть 20 записей) , если вы вернете весь результат для запроса 1, то нет необходимости ударить База данных еще раз для следующих наборов результатов, поскольку они являются дополнительным набором вашего исходного запроса.
В зависимости от ваших данных это может открыть дополнительную возможность для оптимизации.
Я не буду соблюдать ваши требования и, очевидно, количество масштабов будет зависеть от аппаратного обеспечения, размера БД, архитектуры приложения и нескольких других предметов. Вы должны проверить это самостоятельно.
Но я скажу вам метод, который я использовал с успехом:
Выберите имя от пользователей, где называется AL%.
Но используйте TOP 100
, чтобы ограничить количество результатов. Надежда Это помогает.
Использование компонента терминов SQL SOLR на самом деле не является сравнением. В их ядре они решают проблему так же, сделав индекс, а затем сделать его простые вызовы.
Что я хотел бы знать, это «то, что вы пытаетесь автоматически завершены».
В конечном итоге, самый простой и самый просторный способ масштабирования системы состоит в том, чтобы сделать простое решение, а затем просто масштабировать систему путем репликации данных. Попытка кэшировать звонки или предсказывать результаты, просто делают все сложные, и не добираются до корня проблемы (т.е. вы можете только забрать их только так далеко, например, если каждый запрос пропустил кэш).
Возможно, немного больше информации о том, как ваши данные структурированы и как вы хотите, чтобы она была предоставлена, будет полезна.