LinuxForum.Fans
Тема

Куда правильно поместить рабочие данные программы

Автор: u_________10 19 сообщений 3394 просмотров
22.08.2014 16:09 · отредактировано #390360

В продолжение моей темы http://linuxforum.ru/viewtopic.php?id=35019

Учту свою ошибку предыдущего поста - опишу подробнее:

Программа написанная мною в ходе своей работы генерит нечто вроде базы данных которая представлена в виде каталога с вложениями (XML файлы + графические файлы + звуковые файлы = большой суммарный объём). Хочу поместить этот каталог с базой данных в папку пользователя но так что бы не мозолила глаза, углубить в скрытые стандартные системные каталоги. Я почитал об устройстве каталогов Linux и предполагаю что вполне корректно поместить в: /home/usver/.local/Nazvanie_programmi. Прошу подсказать верно ли моё предположение и нужно ли углубляться относительно /home/usver/.local/ или корректно будет в её корне.

22.08.2014 16:52 #390366

Многие программы хранят свои данные в $XDG_CONFIG_HOME/.config/app_name, например, для браузера links это будет /home/user/.config/links и т.д., и т.п, подробнее см. XDG Base Directory Specification.

22.08.2014 17:20 #390372

yars, я уже читал этот материал с переводчиком на пару так как английским не владею, но ответа на свой вопрос не нащёл. Это действительно корректно помещать данные в $XDG_CONFIG_HOME/.config/app_name, это собственно не конфигурация, а рабочие данные, могу предположить что при нормальном использовании программы это будет от нескольких сотен мегабайт до нескольких десятков гигабайт.

22.08.2014 17:52 #390376

Эти генерируемые данные, как я понимаю, временные? Если так, то я бы помещал их куда-нибудь в /tmp/.appname-$UID, к примеру. Так, например, поступают mc, wine. Можно (и, наверное, лучше) помещать данные в $XDG_DATA_HOME/appname, а не в $XDG_CONFIG_HOME, как я написал ранее, так как там хранятся конфигурационные файлы. Еще можно размещать файлы в $HOME/.appname, там можно хранить все что душе угодно. Так делают gimp, всякие проприетарные поделия вроде skype и флеш-плеера.

22.08.2014 18:13 · отредактировано #390377

Нет, это не временные данные, это результат и цель работы программы.

Еще можно размещать файлы в $HOME/.appname

Лично мне не нравятся такие варианты, не люблю срачь из разрозненных по целевому применению данных в корне пользовательской папки.

Подытоживая: $XDG_CONFIG_HOME/.config/app_name - наиболее правильный вариант?

22.08.2014 19:17 #390378
"Димитрий" написал:
Нет, это не временные данные, это результат и цель работы программы.

обычно где хранить результат задаёт юзер...

по порядку:
$XDG_DATA_HOME (по дефолту ~/.local/share/<app_name>) — данные программы, преимущественно статические (установленные расширения, загружаемый контент), но и постоянно-промежуточные, например базы индексации итп
$XDG_CONFIG_HOME (по дефолту ~/.config/<app_name>) — конфиги программы, некоторые хранят тут и другое, но это скорее моветон ИМХО...
$XDG_CACHE_DIR (по дефолту ~/.cache/<app_name>) — для временных данных и промежуточных результатов...
$TMPDIR (по дефолту /tmp) — временные файлы, которые не должны пережить перезагрузку... [это часть POSIX, а не XDG-стандартов]

Димитрий, из того что ты сказал, я бы всё же положил в $XDG_DATA_HOME или, если юзеру может представлять интерес место хранения результатов, то спросил бы у него...

22.08.2014 19:22 #390379
"Димитрий" написал:
Подытоживая: $XDG_CONFIG_HOME/.config/app_name - наиболее правильный вариант?

Для конфигов -- да. Для результата работы программы есть $XDG_DOCUMENTS_DIR. Подробнее можно здесь прочитать.

25.08.2014 08:48 #390536
Димитрий написал:
В продолжение моей темы http://linuxforum.ru/viewtopic.php?id=35019

Учту свою ошибку предыдущего поста - опишу подробнее:

Программа написанная мною в ходе своей работы генерит нечто вроде базы данных которая представлена в виде каталога с вложениями (XML файлы + графические файлы + звуковые файлы = большой суммарный объём). Хочу поместить этот каталог с базой данных в папку пользователя но так что бы не мозолила глаза, углубить в скрытые стандартные системные каталоги. Я почитал об устройстве каталогов Linux и предполагаю что вполне корректно поместить в: /home/usver/.local/Nazvanie_programmi. Прошу подсказать верно ли моё предположение и нужно ли углубляться относительно /home/usver/.local/ или корректно будет в её корне.

Зачем помещять программу/данные в каталог пользователя и прятать её при этом?
Поместите в /usr/local/xxx и сделайте симлинк на всё это куда хотите.

26.08.2014 07:16 #390659

Димитрий, во первых, напишите, КАКИЕ файлы.

Никого не интересует, что у вас XML или XYZ, это не важно. Важно КАК они используются? КАК создаются? Как уничтожаются? И т.д.

02.09.2014 13:03 #391653

Димитрий, во первых, напишите, КАКИЕ файлы.
Никого не интересует, что у вас XML или XYZ, это не важно. Важно КАК они используются? КАК создаются? Как уничтожаются? И т.д.

Дак я же и пишу, используются как база данных программы. При запуске создаётся папка "База", далее в программе пользователь создаёт проект, и в папке "База" появляется папка проекта, далее пользователь начинает работать над проектом и папка проекта наполняется. Удаляется всё аналогично из интерфейса программы, решил пользователь удалить проект, нажал кнопочку и вложенная папочка со всем содержимым проекта уничтожена.

Зачем помещять программу/данные в каталог пользователя...

Я говорю не о "программу/данные", а только о данных созданных программой, как раз это и позволяет размещать программу вообще где угодно. Это не временные файлы в момент исполнения программы, это результат и цель её работы, хранится на диске между сессиями. И если не в папку пользователя то куда? У каждого пользователя будут свои данные.

и прятать её при этом?

Во первых эстетики ради, я вот например не хочу что бы у меня в папке с документами, где всё ранжировано и упорядочено появилось "инородное тело". Во вторых это данные которые программой обрабатываются как единая база данных, но в то же время это просто каталог с файлами которые пользователь может "поправить" в ручную (например в блокноте), а это может привести к повреждению целостности данных для программы. Прятать конечно бесполезно, кому надо тот найдёт, но и искушать лишний раз не стоит.

02.09.2014 16:56 · отредактировано #391675

Скорей всего, это не совсем корректно, но я бы сделал так:
Если потенциально база будет занимать пару мегабайт, то и конфиги, и базу в ~/.programma.
Если база будет большой и громоздкой, то конфиги в ~/.program, а базу в ~/.local/share/programma. Для искушенных, можно опционально в программе добавить где-нибудь в настройках чекбокс, добавляющий симлинк с ~/.local/share/program на ~/Document/program или ~/program.
В моем представлении это было бы удобно. А вам чем голову ломать, проще посоветоваться с кем-то из будущих пользователей. Конечно, есть стандарты и им надо следовать, но надо понимать, что программой пользоваться будет на автор стандарта, а Вася - пользователь, его мнение тоже надо учитывать.

02.09.2014 19:00 #391677

"Димитрий" написал:
Это не временные файлы в момент исполнения программы, это результат и цель её работы, хранится на диске между сессиями. И если не в папку пользователя то куда?
вообще-то для временных данных, которые должны сохраняться между сессиями, есть каталог /var/tmp там можно и нужно хранить например такие данные, как "последние открытые документы", и т.п. Но это касается скорее серверного/системного ПО.

Если же вы пишете приложение для иксов(графическое), то данные надо класть в $XDG_DATA_HOME Подробности здесь: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

"Димитрий" написал:
я вот например не хочу что бы у меня в папке с документами, где всё ранжировано и упорядочено появилось "инородное тело".
Вышеупомянутая переменная $XDG_DATA_HOME обычно установлена в $HOME/.local/share, т.ч.никаких "инородных тел" вы не увидите. Наверняка в вашей системе уже есть каталог $HOME/.local/share сделанный другими программами.
03.09.2014 10:01 #391695
drBatty написал:

[quote="Димитрий"]Это не временные файлы в момент исполнения программы, это результат и цель её работы...

вообще-то для временных данных...[/quote]

o_O *WALL* %)

drBatty написал:
в $HOME/.local/share

Думаю вот это мне и было нужно :) Спасибо.

03.09.2014 11:25 #391701

Димитрий, к чему столько смайлов? Это именно временные данные, временные результаты.Как я понимаю, пользователь этих данных никогда не увидит. Только через вашу программу. А "результат" это то, что можно(и нужно) записать на флешку, и унести.

"Димитрий" написал:
Думаю вот это мне и было нужно
наверное. К тому же, на многих системах /var/tmp смонтирована в ОЗУ и теряется при перезагрузке.
03.09.2014 11:53 #391705

drBatty, это не временные данные, пишу же чёрным по белому. Вот не всегда можно, нужно, а главное удобно, что бы результат болтался в виде файла. В данной программе реализована своего рода база данных (термин БД не подразумевает таблицы и SQL), и работает она только с этой базой данных.

03.09.2014 17:57 #391734

"Димитрий" написал:
это не временные данные, пишу же чёрным по белому.
пишите что хотите. Это нельзя назвать результатом работы, и нельзя назвать исходными данными. Значит это временные данные. Просто необязательно временный файл должен существовать недолго. Вот ваша велосипедная СУБД существует всё время жизни программы. :)
"Димитрий" написал:
термин БД не подразумевает таблицы и SQL
конечно нет. Всегда можно навелосипедить самому СУБД, что-бы не использовать готовую *THUMBSUP*
04.09.2014 10:05 #391785

Последние посты конечно чисты флуд, но всё же ещё один (не удержался уточнить суть религиозных канонов вашей религии по данному вопросу).

В свете утверждений в вашем последнем посте, точнее интерпретируя их на серверные СУБД: серверные СУБД существуют для хранения временных данных?

05.09.2014 03:52 #391894

"Димитрий" написал:
В свете утверждений в вашем последнем посте, точнее интерпретируя их на серверные СУБД: серверные СУБД существуют для хранения временных данных?
всё зависит от точки зрения. Ну и от определений.

Вот вы почему-то считаете,что временные данные обязательно короткоживущие. А я считаю, что любые данные, которые можно всегда восстановить, являются временными. Даже если они годами лежат на диске.

Что да СУБД, то там разные данные есть, есть и временные, и их большая часть. Ну к примеру индексы занимают обычно больше половины БД. Эти индексы почти всегда можно убить и создать заново.
05.09.2014 10:04 #391906

Я лично считаю что это зависит не от формы представления данных или времени их хранения. Если их создание является целью (результатом, продуктом) манипуляций пользователя с прогаммой - то это и есть цель и результат работы программы, а данные созданные побочно как служебные для обеспечения работоспособности и/или комфорта пользователя (и как правило без его участия) - это временные.

Войдите или зарегистрируйтесь, чтобы ответить.