Сортировка на сервере или на клиенте?

В Kotlin вам просто нужно установить строковое значение следующим образом:

<string name="song_number_and_title">"%1$d ~ %2$s"</string>

Создайте текстовое представление на вашем макете:

<TextView android:id="@+id/song_number_and_title"/>

Затем сделайте это в своем коде если вы используете Anko:

val song = database.use { // get your song from the database }
song_number_and_title.setText(resources.getString(R.string.song_number_and_title, song.number, song.title))  

Возможно, вам придется использовать свои ресурсы из контекста приложения.

23
задан Dustin 28 November 2008 в 20:47
поделиться

9 ответов

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

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

29
ответ дан pete 29 November 2019 в 00:56
поделиться

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

, Каково распределение оборудования клиента по сравнению с требованиями к обработке этой операции вида?

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

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

19
ответ дан Luke Girvin 29 November 2019 в 00:56
поделиться

Я выступаю за ответ Roberts, но я хотел добавить немного к нему.

я также одобряю сортировку данных в SQL Server, я работал над многими системами, которые попытались сделать это на стороне клиента, и почти в каждом случае мы должны были переписать процесс, чтобы сделать его в SQL Server. Почему это, Вы могли бы спросить? Хорошо у нас есть две основных причины.

  1. объем данных, отсортированный
  2. потребность реализовать надлежащую подкачку страниц из-за № 1

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

Для помещения некоторых чисел в это, вида Стороны SQL Server к клиентскому виду в нашей среде, никакой подкачке страниц для также. Сторона клиента 28 секунд с помощью XML для сортировки, и Серверное время общей нагрузки вида 3 секунд.

9
ответ дан Jonathan Leffler 29 November 2019 в 00:56
поделиться

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

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

3
ответ дан Paul 29 November 2019 в 00:56
поделиться

Обычно я соглашаюсь с мнением, выраженным выше той сортировки серверной стороны, обычно способ пойти. Однако иногда существуют причины сделать клиентскую сортировку:

  • критерии сортировки являются выбираемыми пользователем или многочисленными. В этом случае это не может быть хорошая идея пойти, добавив shedload индексов к таблице - особенно, если вставляют производительность, беспокойство. Если некоторые критерии сортировки редко используются, индекс не обязательно стоит того, так как вставки превзойдут численностью, выбирает.
  • критериев сортировки нельзя выразить в чистом [редком] SQL, или нельзя индексировать. Это не обязательно немного более быстро клиентский, но это берет загрузку сервера.

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

4
ответ дан Draemon 29 November 2019 в 00:56
поделиться

Как обычно, " Это Зависит ":)

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

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

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

3
ответ дан Kevin Fairchild 29 November 2019 в 00:56
поделиться

Как любой другой связанный с производительностью вопрос, универсальный ответ... "Это Зависит". Однако я разработал предпочтение сортировки на клиенте. Мы пишем приложения на базе браузера, и мое определение клиента разделяется между веб-серверами фактический клиент конечного пользователя, браузер. У меня есть две причины предпочтения сортировки на клиенте к сортировке в DB.

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

SELECT TOP 1 price 
FROM itemprice 
WHERE ItemNumber = ? 
   AND effectivedate <= getdate() 
ORDER BY effectivedate DESC

Тогда порядок строк является в значительной степени частью бизнес-правила и очевидно принадлежит базы данных. Однако, если Вы сортируете на LastName, когда пользователь просматривает клиента фамилией, и с другой стороны на FirstName, когда они нажимают заголовок столбца FirstName, и снова на состоянии, когда они нажимают тот заголовок тогда, Ваша сортировка является функцией представления и принадлежит уровня представления.

второй причиной, которую я предпочитаю сортировать в клиентском слое, является одна из производительности. Веб-серверы масштабируются горизонтально, то есть, если я перегружаю свой веб-сервер с пользователями, я могу добавить другого, и другого и другого. У меня может быть столько серверов фронтэнда, сколько я должен обработать загрузку, и все работает просто великолепно. Но, если я перегружаю базу данных, я завинчен. Базы данных масштабируются вертикально, можно бросить больше аппаратных средств в проблему, уверенную, но в какой-то момент который становится стоившим препятствующий, таким образом, мне нравится позволять DB сделать выбор, который это должно сделать, и позволять клиенту сделать сортировку, к которой это может вполне просто.

2
ответ дан Walden Leverich 29 November 2019 в 00:56
поделиться

Ситуации варьируются, и измеряющий уровень важен.

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

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

1
ответ дан orip 29 November 2019 в 00:56
поделиться

Я предпочитаю настраиваемую сортировку на клиенте, однако я также предлагаю, чтобы большинство операторов SQL по умолчанию содержали разумное предложение ORDER BY. Это очень мало влияет на базу данных, но без него вы можете столкнуться с проблемами позже. Часто, даже не осознавая этого, разработчик или пользователь начинают полагаться на некоторый исходный порядок сортировки по умолчанию. Если предложение ORDER BY не было указано, данные расположены в этом порядке случайно.

2
ответ дан 29 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

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