Игорь Олемской — практические заметки по системному администрированию Linux CentOS

Архив тега ‘sqlite’

firefox: оптимизация внутренних баз данных sqlite (перепечатка)

Комментариев нет

$ find .mozilla/firefox -type f -name "*.sqlite" -exec time sqlite3 \{\} "VACUUM" ";"

via

Внутреннее устройство реляционных баз данных (перепечатка)

Комментариев нет

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

  1. Кортежи. Разбор запроса, построение AST, оптимизация AST. Построение плана выполнения
  2. Выполнение плана запроса
  3. Кэширование планов выполнения запроса
  4. Управление оперативной памятью
  1. Типы индексов: B-Tree, R-Tree, GiST, Bitmap, Hash, GIN

База сообщений ICQ Lite (перепечатка)

Комментариев нет

Потребовалось мне вытянуть сообщения из базы ICQ Lite. К моему удивлению это оказалось довольно просто, ибо база имеет формат SQLite3.

База лежит в C:\Documents and Settings\Username\Application Data\ICQ\UIN\Messages.qdb

Где Username – имя пользователя винды, UIN – числовой ICQ идентификатор.

Качаем бинарник sqlite3.exe и копируем его в C:\Windows

Пуск -> Выполнить: cmd.exe

Делаем CD в директорию базы, выполняем «sqlite3 Messages.qdb».  Смотрим «.schema». Все месаги содержатся в таблице Messages. Поле «fromUser» пустое если сообщение от вас и содержит идентификатор корреспондента, если сообщение шло к вам, то это поле содержит кто писал сообщение. Поле participantsHash это Foreighn Key на таблицу Participants, откуда джойном можно вытянуть к кому было направлено сообщение.

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

По этому следующий запрос вытянет все сообщения из БД

sqlite> select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash;

Можно вытянуть конкретную свою переписку с идентификатором 11111:

sqlite> select p.userId,m.* from Messages m inner join Participants p on m.participantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111;

Однако база вообще в UTF-8 формате, по этому в командной строке вы увидите кучу говна. Советую экспортировать это в файл, а потом уже его читать редактором, понимающим UTF:

C:\blah> sqlite3 -html Messages.qdb «select p.userId,m.* from Messages m inner join Participants p on m.pa
rticipantsHash=p.participantsHash WHERE m.fromUser=111111 OR p.UserId=111111″ > perepiska.html

Отредактируем perepiska.html, вставим в начало:

<html><head><META http-equiv=»Content-Type» content=»text/html; charset=utf-8″></head>
<body><table>

И в конец:

</table></body></html>

Все. Читайте вашу переписку в деталях, охуевайте и сносите побыстрее ICQ Lite.