Лучший подход к подкачке данных базы данных в ASP.Net (база данных SQL VS веб-сервер)

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

Во-первых, запустить SQL-запрос и вернуть только значения первичного ключа отфильтрованных записей, указав предложение TOP, возможно, 100-1000. Затем их можно поместить в переменную сеанса на веб-сервере и соответствующим образом просмотреть, передав подмножество значений первичного ключа обратно на сервер.

Одним из положительных моментов этого является то, что фильтрация записей происходит только один раз, когда пользователь первоначально выполняет поиск, а во-вторых, это дает возможность пролистать весь набор записей по одному элементу за раз, если это необходимо, например, в предварительных просмотрах предстоящих записей, и т. д. Этот метод также дает некоторые преимущества в отношении дальнейшей фильтрации уже отфильтрованных записей, поскольку фильтруемые параметры могут быть определены путем предоставления списка значений первичного ключа обратно в SQL Server, таких как общие атрибуты, заголовок, директора и т. д.

Второй вариант — выполнять как фильтрацию, так и разбиение по страницам через SQL Server, предоставляя такие переменные, как «количество записей на страницу», «номер страницы» и т. д.

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

Что думают все, учитывая вышесказанное, особенно в отношении хранения значений первичного ключа для результатов в переменной сеанса, памяти, альтернативных параметрах и т. д.?


person Nathan    schedule 09.07.2013    source источник


Ответы (1)


Я тот человек, который думает, что время базы данных более ценно, чем время веб-сервера. Но это мой подход. В вашем случае, как вы получаете данные? Используете ли вы DataSet/DataTables или контейнеры со строгой типизацией? Почему бы не использовать linq или другой метод фильтрации на стороне веб-сервера или даже на стороне клиента? (Вы можете отобразить всю запись пользователю и использовать javascript для фильтрации).

person mtzaldo    schedule 09.07.2013
comment
Я согласен с тем, что БД обычно является узким местом. Вы всегда можете добавить больше веб-серверов в ферму, чтобы получить один и тот же db. - person granadaCoder; 09.07.2013
comment
или больше оперативной памяти для текущих веб-серверов. - person mtzaldo; 09.07.2013
comment
Данные в основном извлекаются с помощью базовых функций CRUD, которые используют классы SqlClient, возвращаются в формате XML, а затем десериализуются в строго типизированные объекты, хотя это делается только при возврате сложных объектов с дочерними/родительскими отношениями. Процесс извлечения данных довольно хорош и очень быстро возвращает данные из основного запроса, моей главной заботой будет засорение памяти сервера бесчисленными переменными сеанса, а затем необходимость повторной реализации позже. - person Nathan; 09.07.2013
comment
Попробуйте сохранить данные сеанса на веб-сервере на случай, если их нужно будет извлечь из кэша. Также выполняйте подкачку, фильтрацию и сортировку и прочее в клиенте с помощью js (возможно, вы можете использовать возможности хранилища html5). Таким образом, вы попадаете в память своего веб-сервера, но вся обработка, связанная с манипулированием данными, происходит в клиенте. - person mtzaldo; 09.07.2013