Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
Собственно сейчас данные лежат просто в json-файлах в папке рядом с приложением. Это как минимум ненадёжно и тяжело поддерживать.
Хочется перевести хранение в какую-нибудь embedded базу и заодно может кто подскажет получше способ хранения данных.

Данные можно представить в виде дерева.
Допустим, это город, у него есть улицы, у улиц дома, у домов помещения.

Набор хранимых данных у всех городов/улиц/... здесь и сейчас одинаков, но периодически туда что-то добавляется и/или удаляется.
Не требуется такого, что вот у этого города хранится численность населения, а у этого - нет. Устроит, что любой атрибут есть у всех или ни у кого.

Каких-то сложных выборок не нужно. Только из серии: получить список городов, для города получить список улиц и т.д.
Часть данных достаточно постоянны и некоторые из них нужны отдельно от остальных. Большинство же информации получается всегда вместе и периодически меняется набор данных.
Например, должна быть возможность получить наименование города без загрузки всей информации о нём. В то же время ничего отдельно не нужно о помещении, можно его в базе хранить единым куском. Через месяц может захотеться хранить текущую численность населения города, а еще через месяц - численность населения по годам.

Пока в мыслях схема таблиц грубо такая:
Город (ИД, Наименование, Данные)
Улица (ИД, Наименование, ГородИД, Данные)
Дом (ИД, УлицаИД, Данные)

Данные - либо какая-нибудь BLOB/текстовая колонка для хранения того же json со всем подряд, либо ИД в отдельной таблице для всех таких данных.
Пока для помещений никаких выборок не нужно, поэтому они могут единым куском лежать в данных дома. Если потребуется, то в БД добавится еще одна таблица для помещений. Соответственно численность населения города лежит в данных города, но если понадобится какой-то отбор по ней, то нужно будет добавить колонку и в программе обновить схему с переносом данных в неё.
Добавление/удаление колонок и таблиц - это что-то сильно редкое и не факт, что вообще понадобится, но нужно предусмотреть. основная же часть периодически переделывается. Где-то типы данных меняются (например, было дробное значение в километрах, а стало целое в метрах), где-то типа как с населением - было одно значение, а стала коллекция по годам и т.п.

Вроде под такую вещь должно хорошо подойти что-то из nosql, но нашёл только LiteDB, который вроде как не очень известен и непонятно что там с надёжностью и т.п.
Пока ковыряю SQLite, т.к. в принципе альтернатив из-за требования embedded не вижу, но может кто чего еще посоветует, а то на файлах велосипедить тоже как-то не хочется.
Сейчас объёмы на json-файлах - что-то в районе 5 ГБ, зависит от конкретного пользователя. С программой из коробки 1 гигабайт идёт, а дальше кто сколько нагенерирует.
Если важно, то разработка под .NET FW 4.5.
6 апр 20, 20:26    [22112022]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Карбофос
Это как минимум ненадёжно и тяжело поддерживать.

Разве? Какие проблемы с этим?

Posted via ActualForum NNTP Server 1.5

6 апр 20, 21:06    [22112040]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
Dimitry Sibiryakov

Карбофос
Это как минимум ненадёжно и тяжело поддерживать.

Разве? Какие проблемы с этим?

ну, там больше проблема в текущей реализации. Нет никакого контроля за тем, что файл вообще записался, никак не обрабатывается ситуация, когда компьютер внезапно отключился или кончилось место на диске. По сути надёжность зависит от везения сейчас и в любой момент можно из-за любого чиха потерять файл-другой.
Сложность поддержки по сути в том, что нужно изначально костыльный код поддерживать, это даже морально тяжело )))
О том, чтобы реализовать нормально всё на файлах с переработкой структуры хранения, тоже думаю, но как-то не очень хочется так велосипедить и свой nosql создавать.
С другой стороны пока и SQLite не так, чтобы мне здесь нравился.
6 апр 20, 21:44    [22112056]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2114
Карбофос
Нет никакого контроля за тем, что файл вообще записался, никак не обрабатывается ситуация, когда компьютер внезапно отключился или кончилось место на диске.

А разве есть такие локальные СУБД, которые гарантируют сохранность при отключении компа или недостатке места на диске?
6 апр 20, 21:57    [22112060]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

ъъъъъ
есть такие локальные СУБД, которые гарантируют

Нет. И нелокальных тоже нет.

Posted via ActualForum NNTP Server 1.5

6 апр 20, 22:01    [22112064]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2114
Карбофос,

используй, конечно же, Firebird embedded.

В отличии от SQLite, позволяет одновременную ("параллельную") запись из разных приложений в один файл базы.
У нас есть вариант применения: в качестве хранения локльных данных комплекса приложений, вместо реестра Windows. В том числе и для использования приложений "на флешках". Флешкарточки, конечно, не очень надежны сами по себе (и медленные), но вот у нас десятки тысяч клиентов используют эту схему, и ни разу никто не жаловался.
Да, на всякий случай, если файл базы грохнется, мы прилагаем файл базы - пустышки. Вроде не понадобилось.
А клиенты у нас - так себе в плане аккуратности. Т.е., довольно надежная СУБД.
6 апр 20, 22:39    [22112084]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
ъъъъъ, ну, не так, чтобы гарантируют прямо, но даже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен.
Firebird мне казался для этой задачи практически как из пушки по воробьям (много ненужного функционала, который скорее всего только увеличит время обработки, а пользы не принесёт), но пожалуй тоже нужно посмотреть, т.к. выбор не велик. Только когда я его в последний раз видел, в embedded версии он не умел одновременную работу из разных процессов, хотя здесь это и не нужно.
7 апр 20, 06:22    [22112158]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
experience
Member

Откуда: Новосибирск
Сообщений: 185
У вас было упомянуто про деревья....
http://www.minimdb.com/minimono.html
и автор доступен
https://www.sql.ru/forum/memberinfo.aspx?mid=17007
7 апр 20, 11:40    [22112258]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Карбофос
даже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен.

И в какое место оно запишет этот журнал если место на диске кончилось?..

Posted via ActualForum NNTP Server 1.5

7 апр 20, 12:08    [22112276]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 2511
>Карбофос, вчера, 20:26 [22112022]
>...Если важно, то разработка под .NET FW 4.5.
<
Может быть в этом случае имеет смысл заценить это.
7 апр 20, 12:19    [22112283]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
H5N1
Member

Откуда: Yo.! из "Сравнения субд"
Сообщений: 515
звучит как классическая задача под solr или elasticsearch индекс. solr помню можно было как embedded запускать
8 апр 20, 09:03    [22112631]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 523
experience
У вас было упомянуто про деревья....
http://www.minimdb.com/minimono.html
и автор доступен
https://www.sql.ru/forum/memberinfo.aspx?mid=17007


Под это дело есть интерфейс через Excel
Подробности на www.armex.pro
Скачать https://github.com/mx-alex/MX
8 апр 20, 20:42    [22113102]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
Dimitry Sibiryakov

Карбофос
даже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен.

И в какое место оно запишет этот журнал если место на диске кончилось?..

Главное - чтобы не сломалась БД из-за этого. Я надеюсь, что SQLite именно так и поступает.
То, что текущая запись не уместилась/не успела записаться - это нормально.
10 апр 20, 13:25    [22114120]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
Спасибо ответившим, посмотрю позже что и как. Только не очень понимаю чем эластик тут должен помочь.
Пока успел посмотреть только sqlite и firebird. Если данные сильно разбивать, то выглядят неплохо, но в текущих реалиях неделимые блоки данных больше 50 мегабайт и скорость работы с ними сильно проигрывает хранению в отдельном файле.
Пока задачу отложили, буду потом еще думать. Или буду стараться еще разбить данные, чтобы не было необходимости хранить в одной ячейке такие объёмы или же использовать БД для индексов, а хранить большие данные в файлах.
10 апр 20, 13:31    [22114126]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Ну так и текстовый файлик не сломается, если его не перезаписывать, а создавать новый с
последующим переименованием.

Posted via ActualForum NNTP Server 1.5

10 апр 20, 13:41    [22114131]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
Карбофос
Member

Откуда:
Сообщений: 6
Dimitry Sibiryakov

Ну так и текстовый файлик не сломается, если его не перезаписывать, а создавать новый с
последующим переименованием.

Не хотелось это делать вручную просто
10 апр 20, 20:29    [22114369]     Ответить | Цитировать Сообщить модератору
 Re: Локальная (embedded) БД для изменяющихся данных  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Карбофос
Собственно сейчас данные лежат просто в json-файлах в папке рядом с приложением. Это как минимум ненадёжно и тяжело поддерживать.
Хочется перевести хранение в какую-нибудь embedded базу и заодно может кто подскажет получше способ хранения данных.

Не факт что тебе станет легче поддерживать. Может json в исходниках как конфигурационные файлы это и не плохо.

Сразу сходу замечание.

Вот эта схема - обычно не выдерживает испытание временем.
Город (ИД, Наименование, Данные)
Улица (ИД, Наименование, ГородИД, Данные)
Дом (ИД, УлицаИД, Данные)


Все кто строили гео-классификаторы или базы адресов приходят к одному и тому-же выводу.
Адреса - это иерархическая система. И на 1 уровне иерархии вполне может быть улица дом и переулок
и ПГТ и площадь.

Вобщем суть басни такова. Пока у тебя маленькая база (город). Все нормально. Но если проект
развивать в область или в регион то ты неизбежно зацепишь такие данные которые не ложатся
в такую структуру.
16 апр 20, 11:47    [22117347]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить