|
кеширование данных
|
|||
---|---|---|---|
#18+
Здравствуйте Проблема такая: Появилась задача реализации живого поиска: у Вас есть некий контрол на форме, пользователь что-то вводит в него и в выпадающем списке появляются элементы, начинающиеся с введенной последовательности символов. Нужно сделать так, чтобы не было обращения к базе данных при вводе каждой буквы, то есть организовать некоторый кеш. Например, Вы ищете человека по фамилии. По первым 2 буквам нашлось 500 человек в базе, в кеш взято 300. Дальше при вводе 3 буквы надо принять решение:взять из кеша или обратиться к базе и обновить кеш. Знаете ли Вы какие-нибудь паттерны решений такой задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 14:35 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересноЗдравствуйте Проблема такая: Появилась задача реализации живого поиска: у Вас есть некий контрол на форме, пользователь что-то вводит в него и в выпадающем списке появляются элементы, начинающиеся с введенной последовательности символов. Нужно сделать так, чтобы не было обращения к базе данных при вводе каждой буквы, то есть организовать некоторый кеш. Например, Вы ищете человека по фамилии. По первым 2 буквам нашлось 500 человек в базе, в кеш взято 300. Дальше при вводе 3 буквы надо принять решение:взять из кеша или обратиться к базе и обновить кеш. Знаете ли Вы какие-нибудь паттерны решений такой задачи? Это задача или проблема? Есть проблемы с производительностью? Такое решение однозначно геморное, чтобы «подсасывать» данные, их определённо надо будет отфильтровать, чтобы исключить из них данные, уже лежащие в кеше — что полностью нивелирует все эти свистопляски. Так что прямые руки и правильный индекс и вперёд. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 15:44 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
На форме находится 5 контролов с живым поиском. Каждый по 100 символов. Примерное количество обращений к базе - 500 раз для заполнения данной формы. Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 18:52 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересноНа форме находится 5 контролов с живым поиском. Каждый по 100 символов. Примерное количество обращений к базе - 500 раз для заполнения данной формы. Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить. А почему Вы думаете, что кто-то будет что-то искать во всех пяти контролах по 100 символов? Вы сами когда-то что-то искали по 100м символам - даже если это google? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 19:26 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересно, нужна задержка по времени перед отправкой запроса в БД. То есть пока человек печатает быстро запроса нет. Как только закончил ввод - спустя долю секунды запрос уходит в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 19:38 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой 2. 100 символов могут и не искать, но даже если и по 10 символам, то 5*10 = 50 обращений. Искать будут по всем 5 контролам, они никак не связаны. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 19:43 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересно, 1. Ну так и пускай. будет поиск по каждой букве, только с задержкой в секунду-две. Если печатать пользователь будет быстро, можно сократить накладные расходы - как petalvik Вам посоветовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 19:45 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересно1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой 2. 100 символов могут и не искать, но даже если и по 10 символам, то 5*10 = 50 обращений. Искать будут по всем 5 контролам, они никак не связаны. Я так и не понял, вы столкнулись с проблемой, например, запросы слишком долго работают, или сами себе придумали геморрой и теперь боретесь с ним? Просто интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 21:09 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересноНа форме находится 5 контролов с живым поиском. Каждый по 100 символов. Примерное количество обращений к базе - 500 раз для заполнения данной формы. Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить. Зачем их сокращать? Если это реально необходимые 500 обращений? Тем более задержку в 200-400 мс на ввод ставить надо обязательно, нет абсолютно никакой необходимости делать запросы в процессе ввода. По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества. Так что вы боретесь с ветряными мельницами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 21:14 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 21:53 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересно По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу А как ты себе представляешь такой кеш? Работает 1000 пользователей, каждый ввёл своих 3-4 символа, это что же на серваке надо «закешировать» для каждого «ключа» ввода в 3-4 символа свой набор данных с сотнями записей? Это не экономия получается, а глупое никчёмное расточительство оперативной памяти. Лучше уж сразу в память загрузить эти списки полностью и пусть они там лежат, если такой панический страх перед запросами к базе данных. Не надо бороться с базой данных, она итак уже оптимизирована именно для работы с данными, отдавая их по запросу так быстро, как только это вообще возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 22:33 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интересно1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой.Вы спрашивали про шаблоны. Так вот throttle является шаблоном решением в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 23:27 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
А второе шаблоном решение - это elasticsearch :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2015, 23:29 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
skyANAА второе шаблоном решение - это elasticsearch :) Эластик для простой выпадашки? )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 02:03 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
hVosttskyANAА второе шаблоном решение - это elasticsearch :) Эластик для простой выпадашки? ))))простая выпадашка у тебя в штанах, а у ТС "5 контролов с живым поиском"! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 09:52 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
skyANAпростая выпадашка у тебя в штанах, а у ТС "5 контролов с живым поиском"! Это и есть простая выпадашка. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 10:35 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
petalvikмне_интересно, нужна задержка по времени перед отправкой запроса в БД. То есть пока человек печатает быстро запроса нет. Как только закончил ввод - спустя долю секунды запрос уходит в БД. при заполнении формы действительно чувствуется, что обновление списка не успевает за вводом символов. особенно, если это делать с планшетника (а именно для устройств эта форма и предназначена). получается так: напечатано 3 буквы, пауза, запрос пошел в бд. пока запрос идет, напечатано еще 2 буквы. результат надо снова быстро обновить, так как он не соответствует запросу. то есть в какой-то момент может наступить рассогласование. То есть, если основываться на времени, то надо как-то сериализовать последовательность <набор символов><обновление списка>, так? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 12:05 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
hVosttмне_интересно По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу А как ты себе представляешь такой кеш? Работает 1000 пользователей, каждый ввёл своих 3-4 символа, это что же на серваке надо «закешировать» для каждого «ключа» ввода в 3-4 символа свой набор данных с сотнями записей? Это не экономия получается, а глупое никчёмное расточительство оперативной памяти. Лучше уж сразу в память загрузить эти списки полностью и пусть они там лежат, если такой панический страх перед запросами к базе данных. Не надо бороться с базой данных, она итак уже оптимизирована именно для работы с данными, отдавая их по запросу так быстро, как только это вообще возможно. тут нужно сравнивать как расходуются ресурсы с использованием кеша и без использования кеша. предположим кеш = 300 записей и 1000 пользователей. с использованием кеша: в памяти висит 300.000 записей (каждая по 200 байт примерно) без использования кеша: для каждого из 1000 пользователей идет обращение к базе несколько раз только для одного контрола, и каждое обращение тратит ресурсы как на стороне сервера, с которого идет обращение, так и со стороны сервера базы данных. То есть открывается сессия, идет авторизация, идет запрос и обновление таблицы DataTable. что затратнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 12:15 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
мне_интереснотут нужно сравнивать как расходуются ресурсы с использованием кеша и без использования кеша. предположим кеш = 300 записей и 1000 пользователей. с использованием кеша: в памяти висит 300.000 записей (каждая по 200 байт примерно) без использования кеша: для каждого из 1000 пользователей идет обращение к базе несколько раз только для одного контрола, и каждое обращение тратит ресурсы как на стороне сервера, с которого идет обращение, так и со стороны сервера базы данных. То есть открывается сессия, идет авторизация, идет запрос и обновление таблицы DataTable. что затратнее? Так зачем гадать на кофейной гуще? Оперативная память, где ты собираешься хранить кеш — наиболее важный и значимый ресурс. Должны быть действительно проверенные и веские основания, чтобы его использовать. Кеш — это хорошо. Но прежде чем его использовать, надо понимать что это в реале даст. Сокращение количество обращений к БД — вообще ни о чём. Если всё работает изумительно и летает, то пофигу сколько там обращений к базе данных. Поэтому я с самого начала пытался выяснить, существует ли проблема, или она надумана?? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 12:37 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
ИМХО можно списки передать на клиента и не парить мозг. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 22:25 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
авторобновление таблицы DataTable это че это? еще пользуют? автор300.000 записей (каждая по 200 байт примерно) Loh он и в африке Loh ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 23:32 |
|
кеширование данных
|
|||
---|---|---|---|
#18+
Где-то в степи, как не крути все равно таблица ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2015, 05:17 |
|
|
start [/forum/topic.php?fid=17&msg=38861579&tid=1349639]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 264ms |
0 / 0 |