SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.10.2009 16:25:25

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Массовая загрузка BLOB

Добрый день всем!

Есть несколько бинарных файлов,  содержащих структурированные записи разных типов длиной до 4 к. Эти файлы содержат некоторую общую информацию для всех типов записей и специфическую информацию не только для файлов разного типа, но и для разных записей в рамках одного типа.

база данных принимает вид:

field1(INTEGER) field2(VARCHAR(10)) .... fieldN(BOOL) source(BLOB)

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

Файлы появляются асинхронно.
Возникает вопрос с автоматической массовой загрузкой записей в базу

вот пример загрузки из файла

mysql> LOAD DATA INFILE 'C:/Documents and Settings/Administrator/Desktop/employee.txt'
    -> INTO TABLE LoadedEmployee
    -> FIELDS TERMINATED BY '\t'
    -> LINES TERMINATED BY '\n';


а как это выполнить из shell ?

а вот пример загрузки BLOB http://sqlinfo.ru/forum/viewtopic.php?id=1707


INSERT INTO имя_таблицы (имя_колонки) VALUES("бинарный_код_вашего_изображения");

....
Если у Вас хорошая операционная система, можете открыть изображение в текстовом редакторе, добавить в нем символы обратной косой черты перед каждым из символов ' , " , \0, и получившийся текст использовать в качестве бинарного кода изображения. Виндоус в этом смысле не является хорошей операционной системой, т.к. добавляет после каждого \r символ \n, чем портит изображения.

Есть, однако, смысл воспользоваться (или написать) каким-то приложением, которое сформирует и выполнит запрос за Вас (так, чтобы не мучать текстовый редактор и нервную систему)


действительно ли только для символов ',",\0 поставить "косую черту" какую? (\) а для самой черты как быть? (\\)



Вопрос сводится к тому как записать ("бинарный_код_вашего_изображения")  в текстовый файл, который можно загрузить командой LOAD DATA ?


С уважением, Павел.

Неактивен

 

#2 21.10.2009 16:36:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Массовая загрузка BLOB

1. Из shell — смотрите на команду mysqlimport.
2. Запись файлика на диск — зависит от приложения. Если у Вас PHP, то оно по умолчанию записывает файлики на диск (кажется, за список файлов отвечает $_FILES[]).

Неактивен

 

#3 21.10.2009 16:55:01

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Re: Массовая загрузка BLOB

спасибо за mysqlimport

нет у меня не PHP у меня C++
вопрос не буквально "как записать в файл", а как отобразить бинарное поле в тестовом файле


вот бинарное содержимое(нех): 30 31 32 33 34 35 00 01 02 03 04 05 .....

как будет это выглядеть в текстовом файле    ("012345\0\1\2\3\4\5 ??? или ...

30 - это ascii код символа "0" с ним все просто, а как быть с управляющими символами?

Неактивен

 

#4 21.10.2009 17:08:34

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Re: Массовая загрузка BLOB

наверное это невозможно, так как:


Некоторые случаи, не поддерживаемые оператором LOAD DATA INFILE:

Строки с фиксированным размером (обе опции FIELDS TERMINATED BY и FIELDS ENCLOSED BY пустые) и столбцы типа BLOB или TEXT.

Неактивен

 

#5 22.10.2009 21:07:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Массовая загрузка BLOB

Отобразить бинарное содержимое 30 31 32 я предлагаю так: 30 31 32. Не надо ничего
выдумывать, просто запишите картинку в файл. Перед символами, которые в LOAD
DATA INFILE имеют особый смысл, следует поставить обратную косую черту.

Некоторые случаи, не поддерживаемые оператором LOAD DATA INFILE:
Строки с фиксированным размером (обе опции FIELDS TERMINATED BY и FIELDS ENCLOSED BY пустые) и столбцы типа BLOB или TEXT.

Где Вы нашли эту чушь? Только что проимпортировал колонку BLOB без каких-либо проблем.

--

А вообще, было бы куда проще записать всё в MySQL прямо из C++.

Неактивен

 

#6 23.10.2009 08:20:46

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Re: Массовая загрузка BLOB

т.е. Вы хотите сказать что если я из С++ буду командой INSERT вставлять полтора миллиона записей это будет быстрее чем LOAD DATA INFILE ?

Только что проимпортировал колонку BLOB без каких-либо проблем.

а Вы не могли бы мне на почту прислать сам файл, который импортировался.

Неактивен

 

#7 23.10.2009 11:45:33

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Re: Массовая загрузка BLOB

успешный массовый импорт полей BLOB:

# mysql -e 'CREATE TABLE testblob(id INT, B BLOB)' test
# mysqlimport --local test testblob.txt                     
test.testblob: Records: 32  Deleted: 0  Skipped: 0  Warnings: 0

файл для загрузки в "прицепе" : testblob.txt

бинарные коды, которые закрывались '\' :
0(просто ноль)
9(табуляция)  - по умолчанию разделитель полей (если поля делятся как-то подругому - то нужно этот символ закрывать '\')
10(конец строки)  - по умолчанию разделитель строк (см выше)
13(возврат корретки)
26(конец файла)
34(двойной апостроф)
39(одиночный апостроф)
92(\)


selblob - программа, которая делает select * from testblob и формирует вывод поля BLOB в нех
#./selblob
ID                             BLOB
100                            00 01 02 03 04 05 06 07
101                            08 09 0A 0B 0C 0D 0E 0F
102                            10 11 12 13 14 15 16 17
103                            18 19 1A 1B 1C 1D 1E 1F
104                            20 21 22 23 24 25 26 27
105                            28 29 2A 2B 2C 2D 2E 2F
106                            30 31 32 33 34 35 36 37
107                            38 39 3A 3B 3C 3D 3E 3F
108                            40 41 42 43 44 45 46 47
109                            48 49 4A 4B 4C 4D 4E 4F
110                            50 51 52 53 54 55 56 57
111                            58 59 5A 5B 5C 5D 5E 5F
112                            60 61 62 63 64 65 66 67
113                            68 69 6A 6B 6C 6D 6E 6F
114                            70 71 72 73 74 75 76 77
115                            78 79 7A 7B 7C 7D 7E 7F
116                            80 81 82 83 84 85 86 87
117                            88 89 8A 8B 8C 8D 8E 8F
118                            90 91 92 93 94 95 96 97
119                            98 99 9A 9B 9C 9D 9E 9F
120                            A0 A1 A2 A3 A4 A5 A6 A7
121                            A8 A9 AA AB AC AD AE AF
122                            B0 B1 B2 B3 B4 B5 B6 B7
123                            B8 B9 BA BB BC BD BE BF
124                            C0 C1 C2 C3 C4 C5 C6 C7
125                            C8 C9 CA CB CC CD CE CF
126                            D0 D1 D2 D3 D4 D5 D6 D7
127                            D8 D9 DA DB DC DD DE DF
128                            E0 E1 E2 E3 E4 E5 E6 E7
129                            E8 E9 EA EB EC ED EE EF
130                            F0 F1 F2 F3 F4 F5 F6 F7
131                            F8 F9 FA FB FC FD FE FF


Прикрепленные файлы:
Attachment Icon testblob.txt, Размер: 424 байт, Скачано: 941

Неактивен

 

#8 23.10.2009 16:31:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Массовая загрузка BLOB

Ну то есть Вам удалось импортировать блобы, я правильно понимаю? smile

Неактивен

 

#9 27.10.2009 17:48:35

napavik
Участник
Зарегистрирован: 21.10.2009
Сообщений: 8

Re: Массовая загрузка BLOB

Да удалось!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson