|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Собственно сейчас данные лежат просто в json-файлах в папке рядом с приложением. Это как минимум ненадёжно и тяжело поддерживать. Хочется перевести хранение в какую-нибудь embedded базу и заодно может кто подскажет получше способ хранения данных. Данные можно представить в виде дерева. Допустим, это город, у него есть улицы, у улиц дома, у домов помещения. Набор хранимых данных у всех городов/улиц/... здесь и сейчас одинаков, но периодически туда что-то добавляется и/или удаляется. Не требуется такого, что вот у этого города хранится численность населения, а у этого - нет. Устроит, что любой атрибут есть у всех или ни у кого. Каких-то сложных выборок не нужно. Только из серии: получить список городов, для города получить список улиц и т.д. Часть данных достаточно постоянны и некоторые из них нужны отдельно от остальных. Большинство же информации получается всегда вместе и периодически меняется набор данных. Например, должна быть возможность получить наименование города без загрузки всей информации о нём. В то же время ничего отдельно не нужно о помещении, можно его в базе хранить единым куском. Через месяц может захотеться хранить текущую численность населения города, а еще через месяц - численность населения по годам. Пока в мыслях схема таблиц грубо такая: Город (ИД, Наименование, Данные) Улица (ИД, Наименование, ГородИД, Данные) Дом (ИД, УлицаИД, Данные) Данные - либо какая-нибудь BLOB/текстовая колонка для хранения того же json со всем подряд, либо ИД в отдельной таблице для всех таких данных. Пока для помещений никаких выборок не нужно, поэтому они могут единым куском лежать в данных дома. Если потребуется, то в БД добавится еще одна таблица для помещений. Соответственно численность населения города лежит в данных города, но если понадобится какой-то отбор по ней, то нужно будет добавить колонку и в программе обновить схему с переносом данных в неё. Добавление/удаление колонок и таблиц - это что-то сильно редкое и не факт, что вообще понадобится, но нужно предусмотреть. основная же часть периодически переделывается. Где-то типы данных меняются (например, было дробное значение в километрах, а стало целое в метрах), где-то типа как с населением - было одно значение, а стала коллекция по годам и т.п. Вроде под такую вещь должно хорошо подойти что-то из nosql, но нашёл только LiteDB, который вроде как не очень известен и непонятно что там с надёжностью и т.п. Пока ковыряю SQLite, т.к. в принципе альтернатив из-за требования embedded не вижу, но может кто чего еще посоветует, а то на файлах велосипедить тоже как-то не хочется. Сейчас объёмы на json-файлах - что-то в районе 5 ГБ, зависит от конкретного пользователя. С программой из коробки 1 гигабайт идёт, а дальше кто сколько нагенерирует. Если важно, то разработка под .NET FW 4.5. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 20:26 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
КарбофосЭто как минимум ненадёжно и тяжело поддерживать. Разве? Какие проблемы с этим? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 21:06 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov КарбофосЭто как минимум ненадёжно и тяжело поддерживать. Разве? Какие проблемы с этим? ну, там больше проблема в текущей реализации. Нет никакого контроля за тем, что файл вообще записался, никак не обрабатывается ситуация, когда компьютер внезапно отключился или кончилось место на диске. По сути надёжность зависит от везения сейчас и в любой момент можно из-за любого чиха потерять файл-другой. Сложность поддержки по сути в том, что нужно изначально костыльный код поддерживать, это даже морально тяжело ))) О том, чтобы реализовать нормально всё на файлах с переработкой структуры хранения, тоже думаю, но как-то не очень хочется так велосипедить и свой nosql создавать. С другой стороны пока и SQLite не так, чтобы мне здесь нравился. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 21:44 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Карбофос Нет никакого контроля за тем, что файл вообще записался, никак не обрабатывается ситуация, когда компьютер внезапно отключился или кончилось место на диске. А разве есть такие локальные СУБД, которые гарантируют сохранность при отключении компа или недостатке места на диске? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 21:57 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
ъъъъъесть такие локальные СУБД, которые гарантируют Нет. И нелокальных тоже нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 22:01 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Карбофос, используй, конечно же, Firebird embedded. В отличии от SQLite, позволяет одновременную ("параллельную") запись из разных приложений в один файл базы. У нас есть вариант применения: в качестве хранения локльных данных комплекса приложений, вместо реестра Windows. В том числе и для использования приложений "на флешках". Флешкарточки, конечно, не очень надежны сами по себе (и медленные), но вот у нас десятки тысяч клиентов используют эту схему, и ни разу никто не жаловался. Да, на всякий случай, если файл базы грохнется, мы прилагаем файл базы - пустышки. Вроде не понадобилось. А клиенты у нас - так себе в плане аккуратности. Т.е., довольно надежная СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2020, 22:39 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
ъъъъъ, ну, не так, чтобы гарантируют прямо, но даже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен. Firebird мне казался для этой задачи практически как из пушки по воробьям (много ненужного функционала, который скорее всего только увеличит время обработки, а пользы не принесёт), но пожалуй тоже нужно посмотреть, т.к. выбор не велик. Только когда я его в последний раз видел, в embedded версии он не умел одновременную работу из разных процессов, хотя здесь это и не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 06:22 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 11:40 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Карбофосдаже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен. И в какое место оно запишет этот журнал если место на диске кончилось?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 12:08 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
>Карбофос, вчера, 20:26 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1324126&msg=22112022][22112022] >...Если важно, то разработка под .NET FW 4.5. < Может быть в этом случае имеет смысл заценить это . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 12:19 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
звучит как классическая задача под solr или elasticsearch индекс. solr помню можно было как embedded запускать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2020, 09:03 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
experience Под это дело есть интерфейс через Excel Подробности на www.armex.pro Скачать https://github.com/mx-alex/MX ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2020, 20:42 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Карбофосдаже в том же SQLite есть режим журнала, который хоть от базовых сбоев спасти должен. И в какое место оно запишет этот журнал если место на диске кончилось?.. Главное - чтобы не сломалась БД из-за этого. Я надеюсь, что SQLite именно так и поступает. То, что текущая запись не уместилась/не успела записаться - это нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 13:25 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Спасибо ответившим, посмотрю позже что и как. Только не очень понимаю чем эластик тут должен помочь. Пока успел посмотреть только sqlite и firebird. Если данные сильно разбивать, то выглядят неплохо, но в текущих реалиях неделимые блоки данных больше 50 мегабайт и скорость работы с ними сильно проигрывает хранению в отдельном файле. Пока задачу отложили, буду потом еще думать. Или буду стараться еще разбить данные, чтобы не было необходимости хранить в одной ячейке такие объёмы или же использовать БД для индексов, а хранить большие данные в файлах. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 13:31 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Ну так и текстовый файлик не сломается, если его не перезаписывать, а создавать новый с последующим переименованием. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 13:41 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ну так и текстовый файлик не сломается, если его не перезаписывать, а создавать новый с последующим переименованием. Не хотелось это делать вручную просто ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:29 |
|
Локальная (embedded) БД для изменяющихся данных
|
|||
---|---|---|---|
#18+
Карбофос Собственно сейчас данные лежат просто в json-файлах в папке рядом с приложением. Это как минимум ненадёжно и тяжело поддерживать. Хочется перевести хранение в какую-нибудь embedded базу и заодно может кто подскажет получше способ хранения данных. Не факт что тебе станет легче поддерживать. Может json в исходниках как конфигурационные файлы это и не плохо. Сразу сходу замечание. Вот эта схема - обычно не выдерживает испытание временем. Код: sql 1. 2. 3.
Все кто строили гео-классификаторы или базы адресов приходят к одному и тому-же выводу. Адреса - это иерархическая система. И на 1 уровне иерархии вполне может быть улица дом и переулок и ПГТ и площадь. Вобщем суть басни такова. Пока у тебя маленькая база (город). Все нормально. Но если проект развивать в область или в регион то ты неизбежно зацепишь такие данные которые не ложатся в такую структуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 11:47 |
|
|
start [/forum/topic.php?fid=35&tid=1552175]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 137ms |
0 / 0 |