The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Доступна отказоустойчивая СУБД CockroachDB 1.1, opennews (ok), 14-Окт-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


26. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  +/
Сообщение от лютый жабист__ (?), 14-Окт-17, 22:03 
И что такого? В тех же графовых субд максимальная скорость импорта из csv и реально лютая (у нео4ж 250млн зап за 5 минут)
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

34. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –1 +/
Сообщение от пох (?), 15-Окт-17, 00:08 
> И что такого? В тех же графовых субд максимальная скорость импорта из
> csv и реально лютая (у нео4ж 250млн зап за 5 минут)

я просто оставлю это здесь:
/(?:(?:[^,"]*(?:"[^"]*")*)*,){3}((?:[^,"]*(?:"[^"]*")*)*),/

(c) не мое, подсмотрел

sqlite, кстати, такое не может, тоже предлагают использовать херню на php(sic!) парсящую xml(ooops...)
https://sqlite.org/cvstrac/wiki?p=ImportingFiles

Ответить | Правка | Наверх | Cообщить модератору

40. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  +2 +/
Сообщение от Crazy Alex (ok), 15-Окт-17, 00:38 
Регэкспом? Это что за самоубийцы? Вроде ж на абсолютно любых языках есть нормальные парсеры...
Ответить | Правка | Наверх | Cообщить модератору

41. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –2 +/
Сообщение от пох (?), 15-Окт-17, 00:59 
> Вроде ж на абсолютно любых языках есть нормальные парсеры...

"нормальный парсер" csv не использующий что-то похожее (этот, если кому неочевидно, выковыривает четвертое (вроде ;) поле из несферического в вакууме csv - где могут быть кавычки в тексте, и двойные тоже, пробелы без кавычек, запятые внутри поля и прочие радости жизни) - ну-ка, покажите-ка?

А то вот "нормальный парсер" той же sqlite часто не может прочитать ее собственный экспорт - откуда и берутся идиотические идеи использовать php и xml.

Ответить | Правка | Наверх | Cообщить модератору

46. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  +1 +/
Сообщение от angra (ok), 15-Окт-17, 02:41 
>ну-ка, покажите-ка?

Да легко
https://golang.org/src/encoding/csv/reader.go
Никаких регексов, парсит CSV соответствующий RFC 4180, то бишь "могут быть кавычки в тексте, и двойные тоже, пробелы без кавычек, запятые внутри поля и прочие радости жизни"

А если почитаешь сам RFC 4180, то найдешь там BNF грамматику для этого формата, используя которую, можно генерировать парсеры для нужного ЯП при помощи соответствующего софта.

Ответить | Правка | Наверх | Cообщить модератору

53. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –3 +/
Сообщение от пох (?), 15-Окт-17, 12:09 
> Да легко
> https://golang.org/src/encoding/csv/reader.go

в отличие от regex - который я могу проверить просто внимательно на него глядя, здесь триста (ну ладно, полтораста за вычетом комментариев) строк кода (использующих полмиллиона из других модулей), который проверифицировать я не осилил, не настолько хорошо понимаю go, соответственно - давайте еще ваши восемсот строк тестов, подтверждающих, что этот код таки справится с несферическим в вакууме csv. Я надеюсь, в "нормальном языке" принято их писать? ;-) то что они знали про excel, конечно, хороший признак.

так что я рад, конечно, за go-писателей, что у них есть подобная хренотень в библиотеке, но самому вручную реализовывать конечный автомат по одному символу, а потом еще спотыкаться о битые файлы отдельно - очень не хотелось бы. Надеюсь, оно хотя бы быстрее сишного pcre?

> А если почитаешь сам RFC 4180,

это отдельная тема - например, пункт 6 там в принципе не нужен и не всеми выполняется.
Насколько несферический в вакууме csv будет ему соответствовать, я не берусь угадать.

Ответить | Правка | Наверх | Cообщить модератору

55. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  +2 +/
Сообщение от Orduemail (ok), 15-Окт-17, 14:02 
> триста (ну ладно, полтораста за вычетом комментариев) строк кода

Парсящие регекспы согласно RFC, корректно обрабатывающие комментарии в csv, генерирующие гораздо более осмысленные и информативные ошибки, в случае некорректности CSV. Сопровождённые комментариями, то есть отладка кода или привнесение в него новых возможностей возможны без переписывания всего кода заново.

> использующих полмиллиона из других модулей

Регекспы используют libpcre или, иногда, какую-нибудь альтернативу. Сколько там строк в libpcre если посчитать с зависимостями? Ты _их_ проверифицировал?

> самому вручную реализовывать конечный автомат по одному символу, а потом еще спотыкаться о битые файлы отдельно - очень не хотелось бы

Регекспы, спотыкаясь о битые файлы, ведут себя гораздо более непредсказуемо. Отлаживать регекспы, с тем чтобы они корректно вели себя на некорректно сформированных данных -- это просто самоубийство. А ведь ещё хочется, чтобы парсер указывал на ошибку и пояснял, в чём она состоит -- если он не делает этого, то выходит очень весело, когда я выдрал откуда-то данные, засунул в парсер, а парсер сфейлился сказав лишь "Incorrectly formed data". Как я могу отладить после этого свой код, генерящий csv? Просматривать полмиллиона строк csv глазами в поисках ошибки? Разбивать этот кусок данных на отдельные строки, и смотреть на какой из них сфейлится парсер? А если в этой строке несколько сотен отдельных записей?
Я на своём опыте знаю, чем заканчиваются подобные истории с парсерами на регекспах -- мне приходится отлаживать сразу и регексп, и csv, и исходные данные из которых csv генерируется, и генератор csv. Отлаживать только для того, чтобы понять в каком месте возникает ошибка.

> самому вручную реализовывать конечный автомат по одному символу

Зачем самому? Есть готовый код на github'е. Если тебе неинтересно реализовывать конечные автоматы, то есть люди, которым это интересно. Я, например, всегда с удовольствием. Я всегда выискиваю причины, по которым тот или иной регексп следовало бы заменить на самостоятельную реализацию, потому что если причины есть, то можно наслаждаться написанием конечного автомата, с осознанием того, что я не бесцельной мастурбацией занимаюсь, а делаю полезное дело.

Ответить | Правка | Наверх | Cообщить модератору

56. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –3 +/
Сообщение от пох (?), 15-Окт-17, 15:14 
> Парсящие регекспы согласно RFC, корректно обрабатывающие комментарии в csv

так тебе не надо "согласно rfc", если ты (надеюсь) не писатель процитированного кода, призванного осчастливить всех.
Тебе надо согласно тому бреду, который породил очередной cvs export.

Комментарии? А как их корректно обрабатывать? Я вот вырезаю нафиг - что еще с ними делать, если файл не глазами смотришь?

> Регекспы используют libpcre или, иногда, какую-нибудь альтернативу. Сколько там строк в
> libpcre если посчитать с зависимостями?

ее тестируют, да ;-) Мне вот и интересно, у писателей либ для "нормальных языков" есть такая практика, или "у них все работает"?

Ну и я вовсе не призываю пользоваться regex вместо посимвольного конечного автомата (конкретно этот вообще для другого был придуман) - я привел его просто чтобы в одной строчке сразу показать, что разбор csv - на самом деле довольно непростая и не очень-то быстрая процедура. (если что, этот пример - конечный автомат, записанный, постфактум, в виде regexp'а - хрен иначе такое придумаешь)

Впрочем, sql dump, нормальный, не extended insert какой, и с правильными кавычками, парсить ничуть не лучше. А размер у него изрядно больше за счет ненужных sql'ных конструкций.

Ответить | Правка | Наверх | Cообщить модератору

57. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  +/
Сообщение от Orduemail (ok), 15-Окт-17, 17:11 
>> Парсящие регекспы согласно RFC, корректно обрабатывающие комментарии в csv
> так тебе не надо "согласно rfc", если ты (надеюсь) не писатель процитированного
> кода, призванного осчастливить всех.
> Тебе надо согласно тому бреду, который породил очередной cvs export.

И? Чем регексп в такой ситуации будет лучше? Если те, кто писал код генерящий csv не ориентировались на rfc, то ещё менее вероятно, что они ориентировались на наш наколенный регексп. И что делать в такой ситуации -- вообще нет никакого единого решения. Иногда в интерактивном режиме в текстовом редакторе приходится приводить csv во вменяемый вид. Понятно, используя при этом регекспы и прочую автоматизацию, но проверяя каждое изменение глазами. Ну, конкретно с csv мне не приходилось таким заниматься, но вообще бывало. В excel'е, например, когда я будучи молодым дураком, по доброте душевной написал скрипт для автоматизации секретуткам. Скрипт который брал данные из таблички и складывал в другую табличку. Эти тупые женщины, так и не смогли освоить простые правила внесения исходных данных, и довольно долго донимали потом меня, чтобы я своим скриптом сделал бы их работу. (Совсем некстати, но чёт мне вспомнилась весёлая история, с ещё более весёлым обсуждением: https://workplace.stackexchange.com/questions/93696/is-it-un... )

> Комментарии? А как их корректно обрабатывать? Я вот вырезаю нафиг - что
> еще с ними делать, если файл не глазами смотришь?

Что с ними делать -- вырезать естественно. Но это дополнительные сложности парсящего кода, которые не включены в регексп.

>> Регекспы используют libpcre или, иногда, какую-нибудь альтернативу. Сколько там строк в
>> libpcre если посчитать с зависимостями?
> ее тестируют, да ;-) Мне вот и интересно, у писателей либ для
> "нормальных языков" есть такая практика, или "у них все работает"?

Если тестирование библиотек входит в список необходимых практик для того, что в твоём понимании "нормальный язык", то конечно тестируют. В тех языках в которых я сталкивался с библиотеками для парсинга всяких разных форматов представления данных, типа csv, yaml, toml, и пр, они просто работали. То есть ни разу не было проблем, которые бы порождались кривизной библиотечного кода.

> Ну и я вовсе не призываю пользоваться regex вместо посимвольного конечного автомата
> (конкретно этот вообще для другого был придуман) - я привел его
> просто чтобы в одной строчке сразу показать, что разбор csv -
> на самом деле довольно непростая и не очень-то быстрая процедура. (если
> что, этот пример - конечный автомат, записанный, постфактум, в виде regexp'а
> - хрен иначе такое придумаешь)

А... Ну, с данным утверждением сложно не согласиться. Очевидно, я не понял контекста, прежде чем врываться в обсуждение.

Ответить | Правка | Наверх | Cообщить модератору

58. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –2 +/
Сообщение от пох (?), 15-Окт-17, 18:00 
там, кстати, дополнительно забавное - наше чудушко кетайское эти терабайтные csv _кусками_ жрет! Пожалуй, на досуге, гляну в код - сам я как-то даже без пол-банки и не соображу, можно ли вообще в взятом с середины csv-файле неведомого характера вообще надежно понять, где у него начало следующей записи.

приведенный кусок стандартной библиотеки таким интеллектом не обременен.

Ответить | Правка | Наверх | Cообщить модератору

82. "Доступна отказоустойчивая СУБД CockroachDB 1.1"  –1 +/
Сообщение от . (?), 18-Окт-17, 02:27 
>Отлаживать регекспы, с тем чтобы они корректно вели себя на некорректно сформированных данных -- это просто самоубийство.

Вот! Зришь в корень! 100500%!!!

Ответить | Правка | К родителю #55 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру