Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Эмулирование БД массивами и коллекциями / 17 сообщений из 17, страница 1 из 1
18.02.2014, 08:29
    #38563872
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Здравствуйте!
Нужен совет. Есть некая реляционная таблица (колонки и столбцы) - типичная таблица БД. Сама таблица хранится в виде, скажем .csv файла с разделителем. Содержание предположим (для наглядности)
Город Страна Население ...еще несколько полей
Количество строк от 1 до 10000 к примеру. Файл в итоге не больше мегабайта.
Нужно с этой таблицей поработать в стиле sql.
Т.е. решать задачи такого плана:
Население всех городов России
Сколько городов в США
Список стран с количеством городов
И т.д.
Конечно все это решается элементарно на той же java, закачав файл в базу данных и уже выбирая sql запросами все эти дела юзая odbc и т.д. Но есть нюанс - БД использовать нельзя. В общем нету ее. Остается только считывать файл стандартными методами i/o java в какую нибудь коллекцию и уже юзать циклы. Вопрос как лучше это сделать? Вот например 2 мерная таблица - это arrayList arrayList-ов? А потом циклом for пошел-поехал? А если какой нибудь group by это ведь уже сложнее будет. Возможно есть какие то фичи подобного плана?
Т.е. в виде чего удобнее представить такую таблицу и какими способами удобнее с ней работать? Этакий sql стандартными средствами java.
...
Рейтинг: 0 / 0
18.02.2014, 09:31
    #38563944
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Лучше всё же работать с этим как с коллекцией объектов, а не коллекцией коллекций.
Еще вариант - загнать всё в org.w3c.dom.Document, не знаю как с быстродействием, но там есть XPath, можно делать запросы, почти SQL.

Для первого вариант, кстати, можно использовать JXPath
...
Рейтинг: 0 / 0
18.02.2014, 09:55
    #38563970
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300,
в стиле SQL но не SQL? Оригинально.
...
Рейтинг: 0 / 0
18.02.2014, 10:03
    #38563977
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Что, и даже H2 DB нельзя использовать?
...
Рейтинг: 0 / 0
18.02.2014, 11:50
    #38564192
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
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 строк и так будет отлично.
...
Рейтинг: 0 / 0
18.02.2014, 12:00
    #38564207
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Alexey TominPS: очень подозреваю, что H2 внутри как-то похоже устроена.
group by
join
наверно тоже похоже
...
Рейтинг: 0 / 0
18.02.2014, 13:19
    #38564401
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Alexey Tomin,
в HSQL на самом деле, не HashMap, как кажется на первый взгляд, и не TreeMap, как может показаться на второй, всё сложнее. Первое, что приходит в голову,
- что делать с неуникальными индексами?
- а не многовато ли памяти нужно для таких индексов?
Но вот насчет H2, возможно, автору не мучиться, а просто взять ди и использовать all-in-memory базу данных?
Код: java
1.
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
...
Рейтинг: 0 / 0
18.02.2014, 13:50
    #38564506
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
ivanra,
да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей.

Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre.
...
Рейтинг: 0 / 0
18.02.2014, 13:56
    #38564515
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Мысль о консольном приложении в век веб технологий как то все же смущает..

Насколько проще будет вариант Tomcat + Servlet + MYSQL (все же) ?

Правда тогда вопрос как лучше закачать с рабочего места текстовик в БД
...
Рейтинг: 0 / 0
18.02.2014, 14:01
    #38564529
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Alexey Tomin,
то бишь каждая запись из файла получится как объект класса TableRow ?
Это ли не из области сериализации объектов?
Получается на основе файла мы создаем набор объектов с которым потом работаем
...
Рейтинг: 0 / 0
18.02.2014, 15:11
    #38564675
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300Alexey Tomin,
то бишь каждая запись из файла получится как объект класса TableRow ?
Это ли не из области сериализации объектов?
Получается на основе файла мы создаем набор объектов с которым потом работаем

А набор объектов (строк) всё одно будет. Не объекты- только числа.
Можно работать и с двумерным массивом, но зачем?
...
Рейтинг: 0 / 0
18.02.2014, 15:13
    #38564679
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre.

Нет, не надо. Включается jar'а в проект и всё.
...
Рейтинг: 0 / 0
18.02.2014, 15:44
    #38564754
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
JRE с некоторых пор поставляется вместе с Apache Derby (или как там ее переименовали сановцы).
...
Рейтинг: 0 / 0
18.02.2014, 17:06
    #38564872
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300ivanra,
да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей.

Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre.
Ничто не ново под луной...

Всё до вас уже украдено написано в виде H2, HSQL, Derby. Ничего "ставить" на рабочем месте не надо.
Сборка идёт в war/jar пакет а базу и конфиги просто кладёте рядышком вместе с .properties e.t.c файлами
или лучше в user.home.
...
Рейтинг: 0 / 0
18.02.2014, 17:10
    #38564877
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300ivanra,
да там в общем то об индексах речь не идет, простая примитивная табличка поэтому вопросы производительности, памяти и т.д. можно опустить. Просто специфика в том что никакой mssql mysql oracle сервер использовать не получится, т.е. грубо говоря работает некое консольное приложение на изолированном рабочем месте и должно с файла получить готовый результат. Собственно и набора команд никакого не надо - он изначально жестко задан. Т.е. имеется файл и надо получить из него sum(x) по строкам где x>100 ну и еще несколько таких показателей.

Насчет того что вы посоветовали и насчет h2DB погуглю - спасибо. Но я так понимаю h2 его как то все равно ставить надо на рабочем месте? Тогда не получится, должно быть только jre.

если формат данных постоянный и требуемая операция тоже(или несколько операций), то причем тут база?
напишите обычный парсер файла и агрегируйте данные как хотите.
...
Рейтинг: 0 / 0
18.02.2014, 18:11
    #38564985
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
Я вам один умный вещь скажу, только вы не обижайтесь (с).

Может, ну ее эту джаву для этой задачи? Под виндами давно и везде есть WSH. Под линухами так вообще простор.
...
Рейтинг: 0 / 0
18.02.2014, 22:47
    #38565272
Kenny Fartman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эмулирование БД массивами и коллекциями
pgm300,

посмотри http://db4o.com/ там база данных в стиле Java. в виде объектов Java
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Эмулирование БД массивами и коллекциями / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]