powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / кеширование данных
23 сообщений из 23, страница 1 из 1
кеширование данных
    #38860714
Здравствуйте

Проблема такая:
Появилась задача реализации живого поиска: у Вас есть некий контрол на форме, пользователь что-то вводит в него и в выпадающем списке появляются элементы, начинающиеся с введенной последовательности символов.

Нужно сделать так, чтобы не было обращения к базе данных при вводе каждой буквы, то есть организовать некоторый кеш.

Например, Вы ищете человека по фамилии. По первым 2 буквам нашлось 500 человек в базе, в кеш взято 300. Дальше при вводе 3 буквы надо принять решение:взять из кеша или обратиться к базе и обновить кеш.

Знаете ли Вы какие-нибудь паттерны решений такой задачи?
...
Рейтинг: 0 / 0
кеширование данных
    #38860817
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересноЗдравствуйте

Проблема такая:
Появилась задача реализации живого поиска: у Вас есть некий контрол на форме, пользователь что-то вводит в него и в выпадающем списке появляются элементы, начинающиеся с введенной последовательности символов.

Нужно сделать так, чтобы не было обращения к базе данных при вводе каждой буквы, то есть организовать некоторый кеш.

Например, Вы ищете человека по фамилии. По первым 2 буквам нашлось 500 человек в базе, в кеш взято 300. Дальше при вводе 3 буквы надо принять решение:взять из кеша или обратиться к базе и обновить кеш.

Знаете ли Вы какие-нибудь паттерны решений такой задачи?

Это задача или проблема? Есть проблемы с производительностью? Такое решение однозначно геморное, чтобы «подсасывать» данные, их определённо надо будет отфильтровать, чтобы исключить из них данные, уже лежащие в кеше — что полностью нивелирует все эти свистопляски. Так что прямые руки и правильный индекс и вперёд.
...
Рейтинг: 0 / 0
кеширование данных
    #38861053
На форме находится 5 контролов с живым поиском. Каждый по 100 символов.
Примерное количество обращений к базе - 500 раз для заполнения данной формы.
Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить.
...
Рейтинг: 0 / 0
кеширование данных
    #38861108
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересноНа форме находится 5 контролов с живым поиском. Каждый по 100 символов.
Примерное количество обращений к базе - 500 раз для заполнения данной формы.
Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить.

А почему Вы думаете, что кто-то будет что-то искать во всех пяти контролах по 100 символов? Вы сами когда-то что-то искали по 100м символам - даже если это google?
...
Рейтинг: 0 / 0
кеширование данных
    #38861121
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересно,

нужна задержка по времени перед отправкой запроса в БД. То есть пока человек печатает быстро запроса нет. Как только закончил ввод - спустя долю секунды запрос уходит в БД.
...
Рейтинг: 0 / 0
кеширование данных
    #38861128
1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой
2. 100 символов могут и не искать, но даже если и по 10 символам, то 5*10 = 50 обращений. Искать будут по всем 5 контролам, они никак не связаны.
...
Рейтинг: 0 / 0
кеширование данных
    #38861131
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересно,

1. Ну так и пускай. будет поиск по каждой букве, только с задержкой в секунду-две. Если печатать пользователь будет быстро, можно сократить накладные расходы - как petalvik Вам посоветовал.
...
Рейтинг: 0 / 0
кеширование данных
    #38861171
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересно1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой
2. 100 символов могут и не искать, но даже если и по 10 символам, то 5*10 = 50 обращений. Искать будут по всем 5 контролам, они никак не связаны.

Я так и не понял, вы столкнулись с проблемой, например, запросы слишком долго работают, или сами себе придумали геморрой и теперь боретесь с ним? Просто интересно.
...
Рейтинг: 0 / 0
кеширование данных
    #38861175
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересноНа форме находится 5 контролов с живым поиском. Каждый по 100 символов.
Примерное количество обращений к базе - 500 раз для заполнения данной формы.
Индекс есть и процесс выборки происходит быстро. Но 500 обращений хотелось бы сократить.

Зачем их сокращать? Если это реально необходимые 500 обращений? Тем более задержку в 200-400 мс на ввод ставить надо обязательно, нет абсолютно никакой необходимости делать запросы в процессе ввода. По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества. Так что вы боретесь с ветряными мельницами.
...
Рейтинг: 0 / 0
кеширование данных
    #38861203
По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу
...
Рейтинг: 0 / 0
кеширование данных
    #38861222
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересно По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу

А как ты себе представляешь такой кеш? Работает 1000 пользователей, каждый ввёл своих 3-4 символа, это что же на серваке надо «закешировать» для каждого «ключа» ввода в 3-4 символа свой набор данных с сотнями записей? Это не экономия получается, а глупое никчёмное расточительство оперативной памяти. Лучше уж сразу в память загрузить эти списки полностью и пусть они там лежат, если такой панический страх перед запросами к базе данных.

Не надо бороться с базой данных, она итак уже оптимизирована именно для работы с данными, отдавая их по запросу так быстро, как только это вообще возможно.
...
Рейтинг: 0 / 0
кеширование данных
    #38861247
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интересно1. задание от пользователей - обновление выпадающего списка при вводе каждой буквы, начиная со 2-ой.Вы спрашивали про шаблоны. Так вот throttle является шаблоном решением в данном случае.
...
Рейтинг: 0 / 0
кеширование данных
    #38861249
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А второе шаблоном решение - это elasticsearch :)
...
Рейтинг: 0 / 0
кеширование данных
    #38861295
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА второе шаблоном решение - это elasticsearch :)

Эластик для простой выпадашки? ))))
...
Рейтинг: 0 / 0
кеширование данных
    #38861407
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА второе шаблоном решение - это elasticsearch :)

Эластик для простой выпадашки? ))))простая выпадашка у тебя в штанах, а у ТС "5 контролов с живым поиском"!
...
Рейтинг: 0 / 0
кеширование данных
    #38861447
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAпростая выпадашка у тебя в штанах, а у ТС "5 контролов с живым поиском"!

Это и есть простая выпадашка.
...
Рейтинг: 0 / 0
кеширование данных
    #38861562
petalvikмне_интересно,

нужна задержка по времени перед отправкой запроса в БД. То есть пока человек печатает быстро запроса нет. Как только закончил ввод - спустя долю секунды запрос уходит в БД.


при заполнении формы действительно чувствуется, что обновление списка не успевает за вводом символов. особенно, если это делать с планшетника (а именно для устройств эта форма и предназначена).

получается так: напечатано 3 буквы, пауза, запрос пошел в бд. пока запрос идет, напечатано еще 2 буквы. результат надо снова быстро обновить, так как он не соответствует запросу. то есть в какой-то момент может наступить рассогласование. То есть, если основываться на времени, то надо как-то сериализовать последовательность <набор символов><обновление списка>, так?
...
Рейтинг: 0 / 0
кеширование данных
    #38861579
hVosttмне_интересно По факту хватает 3-4 символов ввода, чтобы сократить в выпадающем списке количество вариантов до приемлемого количества - верно, и поэтому начиная с 5 символа можно обращаться только к кешу

А как ты себе представляешь такой кеш? Работает 1000 пользователей, каждый ввёл своих 3-4 символа, это что же на серваке надо «закешировать» для каждого «ключа» ввода в 3-4 символа свой набор данных с сотнями записей? Это не экономия получается, а глупое никчёмное расточительство оперативной памяти. Лучше уж сразу в память загрузить эти списки полностью и пусть они там лежат, если такой панический страх перед запросами к базе данных.

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

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

предположим кеш = 300 записей и 1000 пользователей.

с использованием кеша: в памяти висит 300.000 записей (каждая по 200 байт примерно)
без использования кеша: для каждого из 1000 пользователей идет обращение к базе несколько раз только для одного контрола, и каждое обращение тратит ресурсы как на стороне сервера, с которого идет обращение, так и со стороны сервера базы данных. То есть открывается сессия, идет авторизация, идет запрос и обновление таблицы DataTable.

что затратнее?
...
Рейтинг: 0 / 0
кеширование данных
    #38861598
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне_интереснотут нужно сравнивать как расходуются ресурсы с использованием кеша и без использования кеша.

предположим кеш = 300 записей и 1000 пользователей.

с использованием кеша: в памяти висит 300.000 записей (каждая по 200 байт примерно)
без использования кеша: для каждого из 1000 пользователей идет обращение к базе несколько раз только для одного контрола, и каждое обращение тратит ресурсы как на стороне сервера, с которого идет обращение, так и со стороны сервера базы данных. То есть открывается сессия, идет авторизация, идет запрос и обновление таблицы DataTable.

что затратнее?

Так зачем гадать на кофейной гуще? Оперативная память, где ты собираешься хранить кеш — наиболее важный и значимый ресурс. Должны быть действительно проверенные и веские основания, чтобы его использовать. Кеш — это хорошо. Но прежде чем его использовать, надо понимать что это в реале даст. Сокращение количество обращений к БД — вообще ни о чём. Если всё работает изумительно и летает, то пофигу сколько там обращений к базе данных.

Поэтому я с самого начала пытался выяснить, существует ли проблема, или она надумана??
...
Рейтинг: 0 / 0
кеширование данных
    #38862115
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО можно списки передать на клиента и не парить мозг.
...
Рейтинг: 0 / 0
кеширование данных
    #38862133
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторобновление таблицы DataTable это че это? еще пользуют?
автор300.000 записей (каждая по 200 байт примерно) Loh он и в африке Loh
...
Рейтинг: 0 / 0
кеширование данных
    #38862200
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

как не крути все равно таблица
...
Рейтинг: 0 / 0
кеширование данных
    #38862212
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosГде-то в степи,

как не крути все равно таблицагы
как ни крути, все равно оперативная память
как ни крути, все равно компьютер
...
как ни крути, все равно энергия
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / кеширование данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]