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

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

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

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

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

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

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

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

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

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

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


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