Сортировка в java?

У меня есть критерии сортировки использования приложения. Но проблема в том, что до того, как я использую сортировку по базе данных (5000 записей). Теперь у меня есть 20 000 записей для сортировки данных. Кто-то сказал мне использовать Java для сортировки. Он должен быть лучше для вашего приложения.

У меня есть два вопроса:

  1. Какой из них лучше для производительности Использовать Java и сортировку базы данных?
  2. Предположим, я использую Java, сортируя его независимо от db.

Может ли сортировка Java обрабатывать 20 000 записей?

3 ответа

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

Если вам нужно научиться сортировать дату с использованием java в памяти, вы можете прочитать следующее: http://docs.oracle.com/javase/tutorial/collections/algorithms/index.html#sorting


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


При манипулировании данными в базах данных применяется следующее общее правило:

  1. Можно ли это сделать с помощью SQL? Сделайте это с помощью SQL.
  2. Можно ли это сделать с помощью PLSQL? Сделайте это с помощью PLSQL.
  3. Сделайте это с помощью языка программирования по вашему выбору, он будет медленным в любом случае.

Почему это плохо на Java?

Чтобы иметь возможность делать что-то вроде сортировки в Java, вам, очевидно, сначала нужно получить данные из базы данных в ваше программное пространство, а затем вам нужно будет записать их обратно. Это очевидные накладные расходы, которые слишком часто игнорируются и особенно затрудняются, если вы работаете с огромными объемами данных. Подумайте, сколько времени потребуется, чтобы вытащить 2 ГБ из базы данных - в худшем случае - по сетевому соединению, а затем даже отправить результат обратно.

Если вы переходите по пути SQL/PLSQL, все данные остаются в базе данных и никогда не должны перенаправляться в вашу программу. Это не только устраняет накладные расходы на передачу, но также позволяет базе данных обрабатывать это в наиболее оптимизированной форме - другие накладные расходы, которые часто игнорируются. Если вы вытаскиваете данные, БД не знает, что вы собираетесь с ним делать, поэтому просто нужно передать все в свой код. Если вы делаете что-то вроде сортировки на одной таблице, DB iE знает, что подтаблицы и ссылки в любом случае не затрагиваются, поэтому нет необходимости даже читать эти данные. Еще раз заметное увеличение производительности. Просто подумайте о том, что может быть быстрее: ваш код, который вы написали за 5 минут, или код БД, который сотни человек писали более 10 лет, пытаясь выжать даже последний бит производительности?

Кроме того, если вы читаете данные из базы данных, они будут переданы вам небезопасным способом. Поэтому, если кто-то делает нападение "человек в середине", когда вы просматриваете пользовательские пароли, этот человек посередине теперь также знает эти пароли. Или наоборот: если ваша программа имеет ошибку, которая может быть использована для получения доступа к критическим данным пользователя, это проблема безопасности. Если ваш код никогда не обладает этой способностью в первую очередь, потому что все эти данные обрабатываются внутри базы данных, то в вашем коде нет ничего, что может быть проблемой безопасности.

licensed under cc by-sa 3.0 with attribution.