
Dmitriy
03.07.2017
07:38:37
Можно долго читать один, просто память освобождать

Arslanali
03.07.2017
07:51:04
Как разбить? Какие библиотеки использовать?

Fike
03.07.2017
08:27:11
при чем здесь мускул?
и что сложного сходить в гугл и узнать про sax парсеры?

Google

Arslanali
03.07.2017
08:30:20
Ничего сложно конечно же нет. советуюсь тут так как тут есть профи которые могу подсказать как сделать это лучше. Ведь я парсить собрался не 20 мегабат а 20 гиг.

Alex
03.07.2017
08:31:35
sax парсер онли
и лучше не на пхп как показала практика )

Fike
03.07.2017
08:32:30
ох, ну давай подкатим к местным, назвав их профи
какая разница пхп не пхп?

Alex
03.07.2017
08:33:25
уж не вспомню

Arslanali
03.07.2017
08:33:32

Fike
03.07.2017
08:33:48

Alex
03.07.2017
08:34:32
блестяще
Ну я последний раз пхп брал в руки лет много назад, и тогда там как-то там было со всем этим грустно, проект был на пхп но оказалось прощее и быстрее написать парсер на python
Видимо осталось от пхп такое послевкусие :)

Alexander
03.07.2017
08:35:32
https://github.com/prewk/xml-string-streamer

Arslanali
03.07.2017
08:35:56

Alex
03.07.2017
08:36:35
если я не ошибаюсь оно тогда пыталось файл сначала целиком в память загрузить а потом распарсить.

Google

Alex
03.07.2017
08:36:41
что-то из этой оперы

Arslanali
03.07.2017
08:37:12
20 гиг в память не получится думаю
Разбить как-то надо этот файл

Alexander
03.07.2017
08:37:44
просто не надо его грузить в память. ключевое слово - XMLReader()

Alex
03.07.2017
08:38:02
Ога

Fike
03.07.2017
08:38:55

Alex
03.07.2017
08:39:27
я знаю чем отличается SAX парсер от какого нибудь SimpleXML
но разница была на тот момент значительна
нюансов не могу сказать не помню.
и да я сравнивал именно SAX парсеры

Fike
03.07.2017
08:40:21
значительна, но не известна
ох, ладно

Nurik
03.07.2017
09:28:09
Привет. Ребята. Как парсить xml файл размером 20 гиг и больше средствами php?
Тоже писал похожий парсер. Если задача не разовая, то придётся ещё о многом позаботиться.
Если файл большой, то нужно ещё учитывать целостность, учитывать, что работа парсера может прерываться. А еще нужно учитывать, что bottleneck может быть в I/O. Ну и конечно логировать все, с оповещением по почте. Если таких файлов много, то нужно еще сервер очередей прикрычивать чтобы в многопроцессном режиме работать. + демонизация через systemv или supervisor

Arslanali
03.07.2017
09:48:18


Maksim
03.07.2017
14:55:45
Привет, я тут с глупыми вопросами к вам
Пытаюсь исправить бд, прикрутил миграции и тут понеслась куча ошибок
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: 'ALTER TABLE abbrev_food_group ADD FOREIGN KEY(ndb) REFERENCES abbrev (ndb)']
https://pastebin.com/T8BBeAAu
Почему не может добавить?

Fike
03.07.2017
15:14:32
по номеру ошибки (1215), как правило, довольно легко отыскать ответ https://stackoverflow.com/a/16969116/2908793

Alexey
03.07.2017
15:34:36

Maksim
03.07.2017
15:35:41
Верно, тип данных не совпадал, привел к единому, но ошибка осталась

lost
03.07.2017
16:00:50

Google

lost
03.07.2017
16:04:42

Alexey
03.07.2017
16:05:36

lost
03.07.2017
16:06:11
надо тоже затестить будет... толку мало конечно от этого в выводе движка, ну да ладно

Alexey
03.07.2017
16:06:16
вот прямо запейстил тот пример со stackoverflow и:
Cannot resolve table name close to:
(`Case_Number` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Clients_has_Staff_Staff1` FOREIGN KEY (`Staff_Emp_ID` ) REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB

lost
03.07.2017
16:07:21
Лоол, они там даже ссылочку на офф. доку подсовывают, мол смотри сюда :)

Ринат
04.07.2017
08:25:05
INSERT INTO user_agent (device_type, robot_name, is_robot, uid)
VALUES (1, 'AppEngine-Google', 1, 'cf26cf29aed18e842f8a3b3064f9e402')
ON DUPLICATE KEY UPDATE uid=VALUES(uid);
не понял юмора, пробую выполнить два раза-оба раза вставляет, вместо того чтобы во второй раз обновить

Alexander
04.07.2017
08:30:16
индекса нету уникального поди

Dmitriy
04.07.2017
08:30:28
или prymary

Ринат
04.07.2017
08:31:15
оуу
логично что база на основе него разруливает, да косяк
unique проставлю
да работает
а что придумать чтобы автоинкремент не увеличивался из за попытки вставки

Dmitriy
04.07.2017
08:58:45
а нужно ли поле с автоинкрементом, если уже есть уникальное поле?

Ринат
04.07.2017
09:00:22
тоже вопрос
тогда нужно будет в другой таблицы через uid связывать и там вставлять uid вместо id
а строка длиной в 32 символа в виде uid-не круто же наверное?

Alexey
04.07.2017
09:07:47
можно использовать HEX()/UNHEX(), вот тут пишут с примерами: http://mysqlserverteam.com/storing-uuid-values-in-mysql-tables/

Google

Alexey
04.07.2017
09:09:14
а в 8.0 появились UUID_TO_BIN() и BIN_TO_UUID()
тоже вопрос
кстати, если ты уберёшь AUTO_INCREMENT и сделаешь uid первичным ключом, то вторичные индексы (если есть) распухнут. потому что используют первичный ключ в качестве указателя на данные. а значит сокращение длины до 16 байт станет ещё актуальнее

Ринат
04.07.2017
09:18:22
я решил от строки брать crc32
и тем самым сделать поле id где будет хранится уникальный результат от crc32

Alexey
04.07.2017
09:20:12

Ринат
04.07.2017
09:20:42
ну вроде как "стабильнее" mysql
нет?
Но каких то различий в запросах и т.д я пока не видел

Alexey
04.07.2017
09:22:54
я бы так сказал: никаких цифр, которые бы подтверждали стабильность mariadb, я не видел. всегда с подозрением отношусь в вещам, которые нельзя ни подтвердить, ни опровергнуть
а в функциональном смысле mariadb уже явно не выдерживает конкуренции с ораклом. увы

Muzaffar
04.07.2017
09:26:48

Alexey
04.07.2017
09:28:08
ну вот такое сравнение, ага. я немного знаю, о чём говорю

Muzaffar
04.07.2017
09:28:42
да вижу
че получается мариядб почти что мускул?

Artem
04.07.2017
09:29:48

Muzaffar
04.07.2017
09:29:52
не знал

Alexey
04.07.2017
09:32:08

Muzaffar
04.07.2017
09:32:48
ясно

Fike
04.07.2017
09:45:38

Google

Ринат
04.07.2017
09:52:53

lost
04.07.2017
09:53:37
это что такое надо хранить, чтобы unsigned bigint закончился очень быстро

Ринат
04.07.2017
09:58:21
Идёт лог
Там есть ссылка на значение справочника
Инсерт он апдейт увеличивает автоинкремент
Бигинт то норм, я про ини

Alexey
04.07.2017
10:02:42
autoincrement значение — это ссылка на значение справочника?

Ринат
04.07.2017
10:10:00
есть справочник
в таблице лога есть внешний ключ на него
при каждой новой записи в логе-нужно либо вставить уникальное значение в справочник, либо обновить

Alexey
04.07.2017
10:14:19
тогда не понимаю, в чём проблема с on duplicate key update. если оно делает обновление, то autoincrement в строчке не изменится. следующая вставка пойдёт с увеличенным autoincrement (то есть будет разрыв), но это ни на что не влияет?