эффективное автоматическое заполнение серверной стороны

Прежде всего все я знаю:

Преждевременная оптимизация является корнем всего зла

Но я думаю, что неправильное автоматическое заполнение может действительно аварийно завершить Ваш сайт.

Я был бы, чтобы знать, существуют ли какие-либо библиотеки там, которые могут сделать автоматическое заполнение эффективно (серверная сторона), которая предпочтительный может вписаться в RAM (для лучшей производительности). Так никакое browserside автоматическое заполнение JavaScript (yui/jquery/dojo). Я думаю, что существует достаточно темы об этом на stackoverflow. Но я не мог найти хороший поток об этом на stackoverflow (возможно, не выглядел достаточно хорошим).

Например, имена автоматического заполнения:

names:[alfred, miathe, .., ..]

Что я могу думать прочь:

  • простой SQL как, например: SELECT name FROM users WHERE name LIKE al%.
    • Я думаю, что эта реализация аварийно завершится с большим количеством одновременно пользователей или большого набора данных, но возможно я неправ так числа (который мог быть обработан), будет прохладно.
  • Используя что-то как solr называет как, например: http://localhost:8983/solr/terms?terms.fl=name&terms.sort=index&terms.prefix=al&wt=json&omitHeader=true.
    • Я не знаю производительность этого так пользователи с большими сайтами, скажите мне.
  • Возможно, что-то как в советах памяти trie, на котором я также не проверил производительность.
  • Я также читал в этом потоке о том, как реализовать это в Java (lucene и некоторая библиотека, созданная shilad)

То, что я хотел бы услышать, является реализацией, используемой сайтами и числами того, как хорошо она может обработать загрузку, предпочтительную с:

  • Свяжитесь с реализацией или кодом.
  • числа, к которым Вы знаете это, могут масштабироваться.
  • Было бы хорошо, если к этому могли бы получить доступ http или сокеты.

Большое спасибо,
Alfred

8
задан Community 23 May 2017 в 12:19
поделиться

3 ответа

Оптимизация для автоматического завершения

, к сожалению, разрешение этой проблемы будет сильно зависеть от данных, которые вы надеетесь на запрос.

Как запросы не станут слишком много нагрузки на вашу базу данных, если вы проводите время, используя «Объяснение» или профилировщик, чтобы показать вам, как планирует оптимизировать запрос для выполнения вашего запроса.

Некоторые основы, чтобы иметь в виду:

  • Индексы: Убедитесь, что у вас есть установка индексов. (Да, во многих случаях, как использует индексы. Существует отличная статья на тему в MyItforum. SQL Performance - индексы и тому подобное предложение ).

  • Присоединения: Убедитесь, что ваши соединения находятся на месте и оптимизированы планировщиком запроса. SQL Server Profiler может помочь с этим. Посмотрите на полный индекс или полную таблицу Scans

Auto-Complete Sub-Sets

Авто-полные запросы - это особый случай, в том, что они обычно работают как постоянно уменьшающие подставки.

  • «Имя», как «A%» (может вернуть 10000 записей)
  • «Имя», как «AL% » (может вернуть 500 записей)
  • «Имя», как «ALA) « (может вернуть 75 записей)
  • « Имя », как« Alan% » (может вернуть 20 записей)

, если вы вернете весь результат для запроса 1, то нет необходимости ударить База данных еще раз для следующих наборов результатов, поскольку они являются дополнительным набором вашего исходного запроса.

В зависимости от ваших данных это может открыть дополнительную возможность для оптимизации.

10
ответ дан 5 December 2019 в 10:03
поделиться
[11399779-

Я не буду соблюдать ваши требования и, очевидно, количество масштабов будет зависеть от аппаратного обеспечения, размера БД, архитектуры приложения и нескольких других предметов. Вы должны проверить это самостоятельно.

Но я скажу вам метод, который я использовал с успехом:

  • Используйте простой SQL, например, для примера: Выберите имя от пользователей, где называется AL%. Но используйте TOP 100 , чтобы ограничить количество результатов.
  • Кэшируйте результаты и поддерживают список терминов, которые кэшируются
  • , когда появится новый запрос, сначала проверьте в списке, если у вас есть термин (или часть термина, кэшированного).
  • Имейте в виду, что ваши кэшированные результаты ограничены, некоторые могут потребоваться выполнить запрос SQL, если термин остается допустимым в конце результата (я имею в виду действительный, если последний результат соответствует сроку.

Надежда Это помогает.

6
ответ дан 5 December 2019 в 10:03
поделиться

Использование компонента терминов SQL SOLR на самом деле не является сравнением. В их ядре они решают проблему так же, сделав индекс, а затем сделать его простые вызовы.

Что я хотел бы знать, это «то, что вы пытаетесь автоматически завершены».

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

Возможно, немного больше информации о том, как ваши данные структурированы и как вы хотите, чтобы она была предоставлена, будет полезна.

1
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: