|
|
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Нужен совет. Есть некая реляционная таблица (колонки и столбцы) - типичная таблица БД. Сама таблица хранится в виде, скажем .csv файла с разделителем. Содержание предположим (для наглядности) Город Страна Население ...еще несколько полей Количество строк от 1 до 10000 к примеру. Файл в итоге не больше мегабайта. Нужно с этой таблицей поработать в стиле sql. Т.е. решать задачи такого плана: Население всех городов России Сколько городов в США Список стран с количеством городов И т.д. Конечно все это решается элементарно на той же java, закачав файл в базу данных и уже выбирая sql запросами все эти дела юзая odbc и т.д. Но есть нюанс - БД использовать нельзя. В общем нету ее. Остается только считывать файл стандартными методами i/o java в какую нибудь коллекцию и уже юзать циклы. Вопрос как лучше это сделать? Вот например 2 мерная таблица - это arrayList arrayList-ов? А потом циклом for пошел-поехал? А если какой нибудь group by это ведь уже сложнее будет. Возможно есть какие то фичи подобного плана? Т.е. в виде чего удобнее представить такую таблицу и какими способами удобнее с ней работать? Этакий sql стандартными средствами java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 08:29 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Лучше всё же работать с этим как с коллекцией объектов, а не коллекцией коллекций. Еще вариант - загнать всё в org.w3c.dom.Document, не знаю как с быстродействием, но там есть XPath, можно делать запросы, почти SQL. Для первого вариант, кстати, можно использовать JXPath ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 09:31 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300, в стиле SQL но не SQL? Оригинально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 09:55 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Что, и даже H2 DB нельзя использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 10:03 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300Здравствуйте! Нужен совет. Есть некая реляционная таблица (колонки и столбцы) - типичная таблица БД. Сама таблица хранится в виде, скажем .csv файла с разделителем. Нужно с этой таблицей поработать в стиле sql. Аналогом таблицы в java является Set<TableRow> где TableRow класс строки таблицы. Или, лучше, Map<ID_записи, TableRow> Аналогом индекса является HashMap<тут_тип_данных_индекса, TableRow> на каждый индекс- свой HashMap. Можно делать HashMap<индекс1,HashMap<индекс2, TableRow>> - это индекс по двум полям. Соответственно insert в "таблицу" делает вставку в Set и все Map'ы. Поиск- поиск по нужной мапе. PS: очень подозреваю, что H2 внутри как-то похоже устроена. PPS: тут есть место для оптимизации, но для 10000 строк и так будет отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 11:50 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Alexey TominPS: очень подозреваю, что H2 внутри как-то похоже устроена. group by join наверно тоже похоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 12:00 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, в HSQL на самом деле, не HashMap, как кажется на первый взгляд, и не TreeMap, как может показаться на второй, всё сложнее. Первое, что приходит в голову, - что делать с неуникальными индексами? - а не многовато ли памяти нужно для таких индексов? Но вот насчет H2, возможно, автору не мучиться, а просто взять ди и использовать all-in-memory базу данных? Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 13:19 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
ivanra, да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей. Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 13:50 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Мысль о консольном приложении в век веб технологий как то все же смущает.. Насколько проще будет вариант Tomcat + Servlet + MYSQL (все же) ? Правда тогда вопрос как лучше закачать с рабочего места текстовик в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 13:56 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, то бишь каждая запись из файла получится как объект класса TableRow ? Это ли не из области сериализации объектов? Получается на основе файла мы создаем набор объектов с которым потом работаем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 14:01 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300Alexey Tomin, то бишь каждая запись из файла получится как объект класса TableRow ? Это ли не из области сериализации объектов? Получается на основе файла мы создаем набор объектов с которым потом работаем А набор объектов (строк) всё одно будет. Не объекты- только числа. Можно работать и с двумерным массивом, но зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:11 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre. Нет, не надо. Включается jar'а в проект и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:13 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
JRE с некоторых пор поставляется вместе с Apache Derby (или как там ее переименовали сановцы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:44 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300ivanra, да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей. Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre. Ничто не ново под луной... Всё до вас уже украдено написано в виде H2, HSQL, Derby. Ничего "ставить" на рабочем месте не надо. Сборка идёт в war/jar пакет а базу и конфиги просто кладёте рядышком вместе с .properties e.t.c файлами или лучше в user.home. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 17:06 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
pgm300ivanra, да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей. Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre. если формат данных постоянный и требуемая операция тоже(или несколько операций), то причем тут база? напишите обычный парсер файла и агрегируйте данные как хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 17:10 |
|
||
|
Эмулирование БД массивами и коллекциями
|
|||
|---|---|---|---|
|
#18+
Я вам один умный вещь скажу, только вы не обижайтесь (с). Может, ну ее эту джаву для этой задачи? Под виндами давно и везде есть WSH. Под линухами так вообще простор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 18:11 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38563944&tid=2127626]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 509ms |

| 0 / 0 |
