Выполнение операции соединения в Java для небольших наборов данных, извлеченных из базы данных.(контекст: веб-приложение) - PullRequest
2 голосов
/ 28 января 2011

Подходит ли в контексте веб-приложения выполнение какой-либо операции JOIN в Java для данных, извлеченных из базы данных (из первого запроса), и использование этих данных «JOIN» для второго и последнего запрос к базе данных, чтобы получить необходимые данные.

Предоставляет ли Java какой-либо встроенный механизм для таких реализаций или каков наилучший способ сделать это?

(Я знаю, это не лучший способ, но база данных не является базой данных SQL и не допускает операций JOIN.)

Данные для операции JOIN: - Один набор данных содержит около 50 целых чисел (avg), а другой содержит около 150 целых чисел (avg).

Первый набор данных будет иметь список только целых чисел, а второй будет иметь список наборов целых чисел и 'data-integer'. Если два целых числа в двух наборах данных пересекаются, то соответствующее «целое число данных» передается в списке результатов. Таким образом, результат будет содержать целые числа данных, соответствующие пересеченным целым числам.

Например, Список А = {21, 65, 93} Список B = {(21, 42342), (53,73242), (93, 32312)}

Результат = {42342, 32312}

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

Спасибо.

Ответы [ 3 ]

5 голосов
/ 28 января 2011

Конечно, вы можете быстро присоединиться к Java.Я знаю только о трех причинах против этого:

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

В любом случае, без БД SQL у вас нет выбора.Таким образом, предполагая простейший случай, т. Е. Присоединение к условию, подобному A.x = B.x, вы можете легко сделать это, вычислив пересечение, используя Set.retainAll.Для каждого члена пересечения вам нужно объединить все соответствующие строки из первой таблицы со всеми соответствующими строками из второй.

Предполагая, что в таблицах больше нет интересных столбцов, все готово.В противном случае вам нужно как-то прикрепить их.В случае, если x уникален как для A, так и B, вы можете использовать Карты, в противном случае вам нужен Multiset (существует множество реализаций, например, в Гуаве).

4 голосов
/ 28 января 2011

Объединение данных в Java - неплохая идея.В некоторых ситуациях это может быть быстрее и разумнее, чем делать соединения в базе данных (это зависит от многих факторов).Особенно, если у вас нет другого выбора: -)

Если вы можете получить результаты из базы данных как стандартные наборы результатов jdbc, то вы можете использовать семейство интеллектуальных наборов строк: JoinRowSet, FilteredRowSet и т. Д.база данных и их объединяют и фильтруют, а также сериализуют на стороне Java (немного как ado.net).Стандартные реализации не являются частью стандарта, но вы найдете их в пакете com.sun.rowset.

Если вам нужно только выполнить это одиночное объединение, это может быть излишним, но, поскольку вы используете некоторую базу данных nosql, вы можете захотеть стандартизировать способ фильтрации и объединения.

1 голос
/ 28 января 2011

Вы спрашиваете, как сделать пересечение множеств в Java?Учитывая ваше определение данных - два набора данных, полностью целые числа - вот мое предложение:

Set a = new HashSet (список элементов из первого набора данных) Set b = new HashSet (списокэлементы из второго набора данных)

Set join = a.retainAll (b);// это как установить пересечения с java.util.Set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...