Страницы

Показаны сообщения с ярлыком субд. Показать все сообщения
Показаны сообщения с ярлыком субд. Показать все сообщения

четверг, 1 мая 2014 г.

Perpetum reposita. Вечное хранение MusicBrainz

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

Вечное хранение MusicBrainz - открытой базы данных музыкальной метаинформации


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

Для скачивание дампов базы данных MusicBrainz, с сайта, придётся написать небольшой скрипт, чтобы не скачивать устаревших данных.

В принципе, если не экономить полосу пропускания, то можно воспользоваться встроенным средством wget и скачать всё.

Вначале опции:
wget -r -np -nH --cut-dirs=4 -P MusicBrainz

-r рекурсивно загрузить,
-np - не выходить за пределы папки fullexport
-nH - не создавать на диске папку ftp.musicbrainz.org/
--cut-dirs=4 не создавать папки pub/musicbrainz/data/fullexport
-P MusicBrainz папка сохранения


1. Из особенностей организации на ftp-сервере MusicBrainz, вначале надо скачать файл LATEST, в котором в первой строке содержиться относительное имя папки, с последним дампом базы данных:

wget ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/LATEST

2. Скачать эту папку, для этого надо содержимое первой строки подставить и сформировать url для загрузки.
Это делается с помощью, спец. кавычек `cat LATEST`, которые вначале выведут на стандартный вывод, первую строку, а оболочка подставить полученное, в качестве имени папки для скачивания.

wget -r -np -nH --cut-dirs=4 -P MusicBrainz ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/`cat LATEST`

Это пример для ручной загрузки. Чтобы, это работало по расписанию, надо использовать абсолютные пути:

У меня, скачиваемые файлы будут храниться в папке проекта Perpetum/MusicBrainz, расположенном на диске смонтированном в /media/gimmor/tibibyte .


$ mkdir /media/gimmor/tibibyte/Perpetum/MusicBrainz

$ wget ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/LATEST -O /media/gimmor/tibibyte/Perpetum/MusicBrainz/LATEST

$ wget -r -np -nH --cut-dirs=4 -A '*.asc' -P /media/gimmor/tibibyte/Perpetum/MusicBrainz ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/`cat /media/gimmor/tibibyte/Perpetum/MusicBrainz/LATEST`


Чтобы протестировать работоспособность, можно добавить опцию -A '*.asc', которая будет скачивать только файлы с расширением asc. Менее минуты, и видна структура сформированных папок. После тестирования работоспособности Cron, это опцию надо убрать, чтобы скачивались все нужные файлы.

В принципе, в расписание можно вставлять эти команды, и если синтаксис правильный, всё должно заработать. Хотя, с кроном, всегда какие-то трудности, то пути, то бит-исполнения и пр.

Выдержка из расписания (crontab -e):

# MusicBrainz - еженедельный образ базы данных
# Загружается еженедельно, в ночь со среды на четверг
# Каталог MusicBrainz должен существовать

15 00 * * 4 /usr/bin/wget ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/LATEST -O /media/gimmor/tibibyte/Perpetum/MusicBrainz/LATEST
17 00 * * 4 /usr/bin/wget wget -r -np -nH --cut-dirs=4 -P /media/gimmor/tibibyte/Perpetum/MusicBrainz ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/`cat /media/gimmor/tibibyte/Perpetum/MusicBrainz/LATEST`

Видно, что вначале загружается файл LATEST.

※※※

Вечное поддержание в состоянии синхронизации. Другой путь


Сервис MediaBrainz позволяет скачать образ виртуальной машины MediaBrainz-сервера [4] и настроить подчинённую репликацию данных [3], чтобы всегда оставаться с актуальной базой данных.



※※※

Ресурсы


1. MusicBrainz. http://musicbrainz.org/
2. MusicBrainz. Прямая ссылка на каталог с дампами базы данных. ftp://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/
3. MusicBrainz. Установка реплицирующего сервера. http://musicbrainz.org/doc/MusicBrainz_Server/Setup
4. MusicBrainz. Прямая ссылка на загрузку образа сервера: ftp://mayhemchaos.org/pub/musicbrainz/vm/musicbrainz-server-2013-10-14.ova


※※※


Perpetum reposita. Вечное хранение Open Street Map


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

Вечное хранение Open Street Map - открытой базы данных картографической информации


Согласно [3], файл данных, содержащий всю информацию Open Street Map формируется еженедельно,начиная в 01:10am Среды (Wednesday), длясь ~ 12 часов и заканчивается в Четверг (Thursday).
В [4], упомянуто об отсутствии ссылочной целостности файла данных. Это связано с внутренними техническими ограничениями.

Копия базы картографических данных Open Street Map, представляет собой сжатый архиватором XML файл, в формате Open Street Map.

Прямая ссылка на базу картографических данных Open Street Map [5].

Для прямого скачивания большого файла ~ 40GB, будет использоваться утилита wget, запускаемая по расписанию в Пятницу, в 00:15 по Московскому времени (в ночь с четверга на пятницу).

Пример из cron-файла:

16 00 * * 5 /usr/bin/wget http://planet.openstreetmap.org/planet/planet-latest.osm.bz2 -O /media/gimmor/tibibyte/Perpetum/planet-latest.osm.bz2

Пока, каждую неделю будет скачиваться по 40GB, что создаст серьезную нагрузку. Возможно, что скачивание будет 1 раз в месяц, в окончательной редакции.

Также есть возможность скачивать дневные изменения, часовые и минутные, но тут надо городить уже целую систему. 

※※※


Ресурсы


1. Сервис Open Street Map.  http://www.openstreetmap.org
2. Планета OSM. http://planet.openstreetmap.org/
3. Планета OSM. Документация. http://wiki.openstreetmap.org/wiki/Planet.osm
4. Планета OSM. FAQ. http://wiki.openstreetmap.org/wiki/Planet.osm/FAQ
5. Планета OSM. База данных. Прямая ссылка. http://planet.openstreetmap.org/planet/planet-latest.osm.bz2
6. Планета OSM. Контрольная сумма базы данных. Прямая ссылка. http://planet.openstreetmap.org/planet/planet-latest.osm.bz2.md5

7. Большая база сырых GPS - точек. http://wiki.openstreetmap.org/wiki/Planet.gpx

8. Обновляемые данные OpenStreetMap в форматах XML и PBF, по территории б. СССР. http://gis-lab.info/projects/osm_dump/index.html

9.  Утилиты для работы с базой данных Open Street Map. http://wiki.openstreetmap.org/wiki/Osmosis

10. Формат OSM. http://wiki.openstreetmap.org/wiki/OSM_XML/XSD


※※※


воскресенье, 16 февраля 2014 г.

Perpetum reposita. Скачать весь Интернет. Joke - All torrents download

На Хабре наткнулся на интересную статью "Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере", где выложена торрент-ссылка на крупную базу хэш-сумм торрент-файлов.
Т.к. у меня нет регистрации там, то заметку оформлю здесь.

После загрузки около 2 Гб, на диске появился файл final.txt.gz, который содержит информацию о названии торрента, его ID, хэш-сумме и ещё несколько полей.
Этого достаточно для экспериментов.

Теперь в игру вступает мощь комадной строки линукса.

Посмотрим, что это за файл.

Для начала подсчитаем количество записей (строк, оканчивающихся символом \n).

$ cat final.txt | wc -l
1411636

Это почти 1,5 миллиона строк.


Файл final.txt в качестве разделителя полей использует табуляцию TAB (символ \t).

Отберём только нужное (название и хэш-сумму), используя команду cut:

$ cat final.txt | cut -f 2,6

Вывод можно направить и в другой файл:

$ cat final.txt | cut -f 2,6 > hashes.csv


Теперь можно выполнять поиск необходимого из командной строки:


Например найти всё PDF - файлы

$ cat final.txt | cut -f 2,6 | grep "PDF"


Теперь в найденном можно найти уже более подробно:


$ cat final.txt | cut -f 2,6 | grep "PDF" | grep "Android"

Для удобства преобразуем хэш-суммы, в т.н. magnet-ссылки.

Magnet-ссылка - это маленькое чудо.
Минимальная magnet-ссылка имеет вид: magnet:?xt=urn:btih:HASH
где вместо HASH подставляется хэш-сумма из файла final.txt

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

Принцип AWK  (помимо всех возможностей) - это отбор строк (записей) по шаблону (pattern) и применение к этому шаблону действия (action).
Шаблоны и действия записываются в виде программы на языке AWK.
В командной строке обычно используются короткие программы, текст которых помещается на строке, а то и двух. Программа заключается в одинарные кавычки.

Кратко переменные, относящиеся к текущей строке (линии):
$0 - вся строка
$1, $2 и т.п. - поля на которые разбивается вся строка (каждый раз каждая строка) внутри AWK

Программа записывается в виде:
'$1 ~ /Android/ {print $0}'
Здесь есть шаблон с регулярным выражением заключённым между двумя //, а также действие. Действие заключается в фигурные скобки {}.

Мы берём первое поле каждой строки - это параметр $1 (а в него попадёт название торрента, так мы решили на предыдущих этапах), и при срабатывании шаблона (мы ищем вхождение слова Android в тексте названия), выполниться действие { print $0 } - просто выведем на стандартный вывод (консоль).

Т.к. просто  хэш-суммы не интересно, то сделаём домашнюю заготовку - добавим префикс magnet-ссылки к каждой хэш-сумме и получим файл вида: название торрента - magnet-ссылка. Заметим, что мы также добавляем разделитель табуляцию в выходном файле - \t перед magnet.



gimmor@red$ cat final.txt | grep "PDF" | cut -f 2,6 | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'

или с ранее отфильтрованным файлом:
gimmor@red$ cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'

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

| grep "PDF" |
| grep "PDF" | grep "RUS" |

| grep "PDF" | grep "RUS" | grep "Ubuntu" |


Т.е. после отбора нужного - только magnet-ссылок:

gimmor@red $cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}' | cut -f 2

Вывод будет примерно таким (хэш-суммы показаны условные):

magnet:?xt=urn:btih:V7LRVHBXLMXZHG4123345DQ7ZECRNXFA
magnet:?xt=urn:btih:55ITF6OOHNHKO4O5P4KY7CXYQ335FCAK
magnet:?xt=urn:btih:JX5WYUMEAG4KMJ5EBJ123345SP4UZZPF4
magnet:?xt=urn:btih:WDDIG2CDI656FVTGGPHL2KH7PWCRZAKD
magnet:?xt=urn:btih:YFEPMNFQS6X123345WRM7RM3EUEPGTOH
magnet:?xt=urn:btih:ZEZJZ6DMPDFVJPUJ123345OI2AXZZUB3J



Теперь, получив узкий список magnet-ссылок того что нужно, можно выполнять загрузку необходимого.

gimmor@red$ sudo apt-get install transmission-cli

Трансмиссия в командной строке запускается так:

gimmor@red$ transmission-cli [options] <file|url|magnet>
-m - важная опция, включает открытие порта на роутере, посредством службы  UPnP.

gimmor@red$ transmission-cli -m "magnet:?xt=urn:btih:YFEPMNFQS6XYDS3TF123345M3EUEPGTOH"

Желательно, чтобы графический клиент не был запущен, иначе возникает конфликт портов. Можно и перенастроить порты у графического клиента.

В графическом клиенте, надо в меню "Файл" - "Открыть URL..." указать magnet-ссылку и далее стандартно.

※※※

Использование SQL


Если воспользоваться моей заметкой по PostrgreSQL, то можно установить СУБД и загрузить туда полученный csv-файл, всю базу final.txt и пр.
И тогда выполнение sql запросов будет интерактивно + можно много чего ещё делать.

※※※

Ресурсы


- Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере. http://habrahabr.ru/post/195454/
- Содержимое The Pirate Bay уместили в 90 мегабайт. http://habrahabr.ru/post/137929/

※※※

суббота, 13 октября 2012 г.

Установка сервера PostgreSQL в Ubuntu 12.10



Эта заметка, по следам установки сервера PostgreSQL 9.1 в Ubuntu 12.10 Gnome shell remix и на микросервере, под управлением Ubuntu Server 12.04.

Старая заметка по теме установки posgresql версии 8.4, находится по адресу: http://gimmor.blogspot.com/2010/11/postgresql-ubuntu.html 


Требуемые пакеты программ

Сам сервер базы данных версии 9.1:
root@microserver:# apt-get install postgresql

Пакет posgresql - это метапакет, для удобной установки.

Графическая утилита управления pgAdmin:
root@microserver:# apt-get install pgadmin3

После установки сервер postgresql сразу же запускается в системе.


Конфигурация сервера PostgreSQL

Конфигурационные файлы сервера PostgreSQL находятся в /etc/postgresql/9.1/main/

Главный конфигурационный файл сервера PostgreSQL - /etc/postgresql/9.1/main/postgresql.conf


Место хранения файлов баз данных

Базы данных хранятся в файлах, из местоположение в файловой иерархии системы задается опциями, в главном конфигурационном файле:

data_directory = '/var/lib/postgresql/9.1/main' 

Место по-умолчанию - опасное место, т.к. переустановка (upgrade) системы может уничтожить базу данных (отрицательный опыт), потери прямо пропорциональны потраченным усилиям.
Рекомендация - изменить. Желательно, - отдельный раздел, защищенный RAID и резервированный.


Первые шаги после установки


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

listen_addresses = '*' не самый лучший вариант, поэтому я перечисляю интерфейсы, на которых будет доступен сервис posgresql.

listen_addresses = 'localhost, home'

Сервер PostgreSQL слушает на порту port = 5432 всех интерфейсов,перечисленных в listen_addresses. Может потребоваться правка правил файрвола, если нет доступа.


Также, есть приятная возможность, включить публикацию сервера посредством Avahi (Bonjour).
bonjour = on      # включить публикацию сервиса                          
bonjour_name = '' # по умолчанию имя сервиса=имя компьютера
Оказывается, текущая сборка не поддерживает Bonjour. Придется отключить.


Обычно, изменение конфигурационного файла, требует перезапуска сервера.
root@microserver:# service postgresql restart

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

PSQL - командная утилита для управления сервером PostgreSQL 

psql - оболочка, имеющая интерактивный и пакетный режимы управления сервером Postgresql. Из основного, - позволяет настраивать пользователей СУБД,  создание новых баз данных, новых таблиц, выполнение SQL-запросов интерактивно и пакетно.

postgres@microserver:$ psql

Выход из интерактивного режима
postgres# \q



Создание собственной базы данных

Сервер баз данных PostgreSQL может хранить множество баз данных. Обычно база данных создается для какой-либо цели, проекта.

postgres@microserver:$ createdb oko

для управления бд запусить psql с опцией -d oko

postgres@micoserver:~$ psql -d oko
psql (9.1.6)
Type "help" for help.

oko=# 
Получена командная строка базы данных oko.


Создание нового пользователя сервера базы данных PostgreSQL

Создание пользователя (роли) базы данных PostgreSQL выполняется командой createuser.

postgres@microserver:$ createuser iam

Чтобы сразу создать пароль пользователю:
postgres@microserver:$ createuser -P iam

Новый пользователь iam в базе данных позволит использовать psql пользователем iam@microserver, т.е. будет соответствие между системными и пользователями БД.

iam@microserver:$ psql -d oko


Удаление пользователя сервера базы данных PostgreSQL

postgres@microserver:$ dropuser iam


Резервирование базы данных и восстановление

Полный образ базы данных создается командой pg_dump:
postgres@microserver:$ pg_dump oko > oko.dump

Восстановление из полного образа базы данных
postgres@microserver:$psql oko < oko.dump

Восстановление из полного образа базы данных возможно и на другой сервер.

Встроенное средство импорта текстовых файлов
В Postgresql присутствует команда COPY, которая позволяет взять CSV файл и загрузить его в таблицу базы данных. Таблица должна существовать, поля должны совпадать.
При использовании команды COPY можно столкнуться, с тем, что сервер выдает сообщение "отказано в доступе". Установка прав на чтение всем не помогает. Надо еще добавить бит исполнения к каталогу в котором находится файл. chmod a+rwx dir

Т.е. если сделать на сервере папку с полными правами для всех, то из неё можно будет читать файлы командой COPY и писать в неё.
Проблема также известка как "postgresql COPY file permission denied"

Пример команды COPY. Выполняется под пользователем, который имеется также в БД.

$ psql -d oko --command "COPY oko.table FROM '/home/csv/csvfile.csv' DELIMITER E'\t';"
К синтаксису надо относиться очень внимательно. Особенно при вызове из скриптов.

Папка csv доступна на чтение и запись всем:

$ ls /home/
drwxrwxrwx csv


PSQL минимальные навыки

\q - выйти из psql.
\h [SQL команда] - вывести справку по команде SQL.
\g [SQL запрос]; - выполнить SQL запрос, заметьте точку с запятой в конце, означающую конец запроса
Запрос можно выполнять прямо в приглашении базы данных:
oko# SELECT version();
Нажмите q, чтобы вернуться в приглашение.
Запрос может быть не только на выборку (SELECT) но и на создание, удаление, манипуляции с таблицами, базами данных, внутренними таблицами.


Например, выполнение SQL запроса из скрипта или командной строки:
iam@microserver$ echo "\x \\\ SELECT COUNT(*) FROM oko.mytable;" | psql -d oko
Пользователь iam должен быть пользователем базы данных. Схема базы данных: oko, таблица oko.mytable, база данных oko. Обратите внимание, на 3 обратных слеша, которые экранируются. Используется стандартный ввод psql.

Можно и так, выполнить готовый sql-запрос:
iam@microserver$ psql -d oko --command "\i 'sqlscript.sql'"
а ответ просматривать в консоли интерактивно, либо использовать опцию --output='output.txt', чтобы вывести в ответ в файл. Файл будет создан на том компьютере, где запущен psql.
По умолчанию, psql выводит ответ, с использованием разметки "под таблицу", а чтобы получить сырые данные в виде CSV файла, надо добавить тройку опций: --tuples-only  --no-align --field-separator
Итого, вывод sql-запроса в csv-файл:
iam@microserver$ psql -d oko --command "\i 'sqlscript.sql'" --output='myoutput.txt' --tuples-only --no-align --field-separator=''

По умолчанию (без опций --no-align, --field-separator), разделителем выступает  ( | ), что для многих целей годиться.
Если не указать опцию, --no-align, вывод будет отформатирован визуально.

Табуляция в csv-файлах, хороша тем, что визуально разделяет поля, не очень часто встречается в строках, как например, запятая (в числах, либо символ перенаправления |, который по умолчанию).
В командной строке задается следующим образом: нажимается ctrl V, затем TAB. получиться пустое пространство, это и есть табуляция.
В интерактивном режиме задается так: \pset fieldsep '\t'
В скрипте bash (для команды psql), просто нажимается кнопка TAB.

Бинго.


Типы данных PostgreSQL

Типы данных, - основа возможностей PostgreSQL в части хранения и выборки данных.
PostgreSQL поддерживает стандартные типы данных SQL: int, smallint, real, double precision, char(N ), varchar(N ), date, time, timestamp, interval, собственные типы PostgreSQL, геометрические типы, определенные пользователем типы.

Скрипт создания структуры базы данных

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

Скрипт пишется на обычном SQL, правда на том, который понимает PostgreSQL.

Можно структру базы данных делать в графическом приложении pg_admin, а потом эскпортировать структуру в скрипт.

-- Так, начинаются комментарии
-- Тестовая БД, для сайта: gimmor.blogspot.com

CREATE SCHEMA oko;

CREATE TABLE oko.table (

 field1 integer,  -- поле 1
 field2 text,     -- поле 2
 field3 date,     -- поле 3
 field4 time      -- поле 4
);

Ресурсы



четверг, 18 ноября 2010 г.

Настройка сервера PostgreSQL под Ubuntu


Настройка сервера PostgreSQL под Ubuntu Linux
Заметки перенесены. Без редакции.

По умолчанию PostgreSQL устанавливается с высокой степенью защиты и не позволяет подключаться к серверу баз данных посторонним приложениям. Для корректной работы необходимо установить новые права доступа.


Настройка PostgreSQL для работы в локальном режиме

Для настройки PostgreSQL необходимо открыть окно консоли (xterm, gnome-terminal, konsole или другую). Далее необходимо выполнить следующие команды:
sudo su - postgres
nano /etc/postgresql/8.4/main/pg_hba.conf

Опуститесь в конец файла и отредактируйте последние строки как показано в примере:
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust

Нажмите Ctrl+O и Enter для сохранения файла, затем  и Ctrl+X для выхода из редактора.
Перезапустите компьютер либо выполните команды:
exit
sudo /etc/init.d/postgresql-8.4 restart

Настройка PostgreSQL для работы в сетевом режиме

Для настройки PostgreSQL необходимо открыть окно консоли (xterm, gnome-terminal, konsole или другую).
Далее необходимо выполнить следующие команды:
sudo su - postgres
nano /etc/postgresql/8.4/main/pg_hba.conf

Опуститесь в конец файла и отредактируйте последние строки как показано в примере:
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         192.168.0.0/24      trust

Выполните команду:
nano /etc/postgresql/8.4/main/postgresql.conf

Найдите в файле строчку: #listen_addresses = `localhost`

Отредактируйте текст рядом с этой строчкой в соответствии с примером:
listen_addresses = `*`                  # what IP address(es) to listen on;
                                                    # comma-separated list of addresses;
                                                    # defaults to `localhost`, `*` = all
                                                    # (change requires restart)
port = 5432                                 # (change requires restart)

Нажмите Ctrl+O и Enter для сохранения файла, затем  и Ctrl+X для выхода из редактора.

Перезапустите компьютер либо выполните команды:
exit
sudo /etc/init.d/postgresql-8.4 restart