<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Быстрая работа с файлами данных</title>
	<atom:link href="http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/</link>
	<description>сообщество программистов</description>
	<lastBuildDate>Fri, 19 Mar 2010 19:57:08 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Евгений</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14447</link>
		<dc:creator>Евгений</dc:creator>
		<pubDate>Tue, 01 Jul 2008 09:57:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14447</guid>
		<description>Прочитайте свое сообщение через 5 лет.</description>
		<content:encoded><![CDATA[<p>Прочитайте свое сообщение через 5 лет.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ved</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14440</link>
		<dc:creator>ved</dc:creator>
		<pubDate>Tue, 01 Jul 2008 08:24:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14440</guid>
		<description>Да не проблема найти хостинг, и не проблема работать с MySQL но ето ужасное извращение и тонна неудобств.
У меня комерческий хостинг с поддержкой всей необходимой гадости, но от етого ничего не меняется.
Помогите найти алгоритмы и способы создание быстрой базы на основе файлов.</description>
		<content:encoded><![CDATA[<p>Да не проблема найти хостинг, и не проблема работать с MySQL но ето ужасное извращение и тонна неудобств.<br />
У меня комерческий хостинг с поддержкой всей необходимой гадости, но от етого ничего не меняется.<br />
Помогите найти алгоритмы и способы создание быстрой базы на основе файлов.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Скакунов Александр</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14404</link>
		<dc:creator>Скакунов Александр</dc:creator>
		<pubDate>Sat, 28 Jun 2008 19:26:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14404</guid>
		<description>Дружище, не гони: щас надо очень потрудится, чтобы не смочь найти халявный хостинг РНР + мускул.</description>
		<content:encoded><![CDATA[<p>Дружище, не гони: щас надо очень потрудится, чтобы не смочь найти халявный хостинг РНР + мускул.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ved</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14403</link>
		<dc:creator>Ved</dc:creator>
		<pubDate>Sat, 28 Jun 2008 19:18:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-14403</guid>
		<description>Ето всё конечно хорошо, но не слишком хочется зависеть от хостеров несколькими технологиями одновременно(к примеру PHP &amp; MySQL) + способ доступа через запросы - идея не из лучших.
Подскажите как написать быструю базу данных на самом PHP. Или хотябы общие принцыпы. Пусть даже прийдётся переписать всю MySQL на PHP, но ето будет намного удобней в итоге чем использование оригинальной БД, пусть даже немного медленней.</description>
		<content:encoded><![CDATA[<p>Ето всё конечно хорошо, но не слишком хочется зависеть от хостеров несколькими технологиями одновременно(к примеру PHP &amp; MySQL) + способ доступа через запросы &#8211; идея не из лучших.<br />
Подскажите как написать быструю базу данных на самом PHP. Или хотябы общие принцыпы. Пусть даже прийдётся переписать всю MySQL на PHP, но ето будет намного удобней в итоге чем использование оригинальной БД, пусть даже немного медленней.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Скакунов Александр</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10270</link>
		<dc:creator>Скакунов Александр</dc:creator>
		<pubDate>Tue, 03 Jul 2007 15:43:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10270</guid>
		<description>Комфортно - не подскажу :)</description>
		<content:encoded><![CDATA[<p>Комфортно &#8211; не подскажу <img src='http://www.developers.org.ua/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: имидж-М</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10269</link>
		<dc:creator>имидж-М</dc:creator>
		<pubDate>Tue, 03 Jul 2007 15:20:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10269</guid>
		<description>круто.
идея должна сработать.

Может, уже по ходу скажете, чем однострочный файл ~70Mb открыть и комфортно поредактировать?

Спасибо.</description>
		<content:encoded><![CDATA[<p>круто.<br />
идея должна сработать.</p>
<p>Может, уже по ходу скажете, чем однострочный файл ~70Mb открыть и комфортно поредактировать?</p>
<p>Спасибо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Скакунов Александр</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10268</link>
		<dc:creator>Скакунов Александр</dc:creator>
		<pubDate>Tue, 03 Jul 2007 13:06:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10268</guid>
		<description>У меня была такая же задача, и я решил её в два присеста:

1. Использую LOAD DATA INFILE для очень быстрой загрузки данных во временную таблицу (CREATE TEMPORARY TABLE), потому что импортить файл в рабочую таблицу напрямую - опасно.

2. По необходимости переколбашиваю данные в нужных полях временной таблицы (она теперь является как бы отображением на CSV-файл) и из неё заливаю что мне надо уже в рабочую таблицу:

INSERT INTO `table` (`field1`, `field2`, `field3`)
SELECT FROM `temp_table` `csv_field2`, `csv_field4`, `csv_field5`

Получается всё равно в миллиорд раз быстрее, чем инсёртами из PHP заливать CSV-файл.

Есть ответ?</description>
		<content:encoded><![CDATA[<p>У меня была такая же задача, и я решил её в два присеста:</p>
<p>1. Использую LOAD DATA INFILE для очень быстрой загрузки данных во временную таблицу (CREATE TEMPORARY TABLE), потому что импортить файл в рабочую таблицу напрямую &#8211; опасно.</p>
<p>2. По необходимости переколбашиваю данные в нужных полях временной таблицы (она теперь является как бы отображением на CSV-файл) и из неё заливаю что мне надо уже в рабочую таблицу:</p>
<p>INSERT INTO `table` (`field1`, `field2`, `field3`)<br />
SELECT FROM `temp_table` `csv_field2`, `csv_field4`, `csv_field5`</p>
<p>Получается всё равно в миллиорд раз быстрее, чем инсёртами из PHP заливать CSV-файл.</p>
<p>Есть ответ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: имидж-М</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10266</link>
		<dc:creator>имидж-М</dc:creator>
		<pubDate>Tue, 03 Jul 2007 11:52:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10266</guid>
		<description>ага, а еще как при этом на ходу эксплодить значение столбца и подставлять его блоки в качестве значений для двух других полей.

Например, как для CSV:
f1,f2,f3,f4,f5
1, 2, 3, 4 5, 6
добиться логики вставки:
insert into table {field1, field2, field3} values (2, 4, 5);</description>
		<content:encoded><![CDATA[<p>ага, а еще как при этом на ходу эксплодить значение столбца и подставлять его блоки в качестве значений для двух других полей.</p>
<p>Например, как для CSV:<br />
f1,f2,f3,f4,f5<br />
1, 2, 3, 4 5, 6<br />
добиться логики вставки:<br />
insert into table {field1, field2, field3} values (2, 4, 5);</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Дробмаш</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10265</link>
		<dc:creator>Дробмаш</dc:creator>
		<pubDate>Tue, 03 Jul 2007 11:14:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-10265</guid>
		<description>Если бы еще кто-то объяснил, как импортировать CVS с избыточными столбцами.
Как ему описать столбцы, если мне надо только 2й, 8,9,14й ? Притом имена полей базы отличаются от тех, которые в хидере файла описаны.</description>
		<content:encoded><![CDATA[<p>Если бы еще кто-то объяснил, как импортировать CVS с избыточными столбцами.<br />
Как ему описать столбцы, если мне надо только 2й, 8,9,14й ? Притом имена полей базы отличаются от тех, которые в хидере файла описаны.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Скакунов Александр</title>
		<link>http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-8787</link>
		<dc:creator>Скакунов Александр</dc:creator>
		<pubDate>Sat, 25 Nov 2006 16:30:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/a4/2006/10/26/byistraya-rabota-s-faylami-dannyih/#comment-8787</guid>
		<description>Короткий ответ: болты лучше откручиваются не молотком, а гаечным ключом. Вариативность нужна.

Теперь подробно.
Если бы я сам не пользовался предложенным в статье методом, я бы его и не советовал другим.

&lt;blockquote&gt;При импорте CSV средствами MySQL нет возможности контроля данных. PHP ведь не учавствует — вот и нечем проверить&lt;/blockquote&gt;
Да, я старался убедить вас, что лучше не грузить большие объёмы данных PHP (неподходящий инструмент). Но никто не запрещает управлять загрузкой с помощью PHP (эдакий командный пункт), запуская нужные запросы, ниже я покажу как.

&lt;blockquote&gt;это прямая дорога к SQL-инъекциям и дефейсу&lt;/blockquote&gt;
На лицо непонимание процесса загрузки: MySQL сервер &lt;em&gt;сам&lt;/em&gt; отквочивает что надо. SQL-инъекции возможны как раз из-за использования PHP, с помощью которого нормальный запрос может быть исправлен на вредоносный. Другими словами, я не представляю, куда надо засунуть, скажем, &quot;&lt;em&gt;DROP DATABASE&lt;/em&gt;&quot; в загружаемый файл, чтобы этот запрос выполнился, eval() тут нет.

&lt;blockquote&gt;Или я просто не знаю аналогов addslashes и htmlspecialchars в мускуле&lt;/blockquote&gt;
&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/string-functions.html&quot; rel=&quot;nofollow&quot;&gt;QUOTE()&lt;/a&gt;, но он вряд ли пригодится.

&lt;blockquote&gt;Нет возможности подстраиваться под пользовательскую структуру&lt;/blockquote&gt;
Кто ж хардкодит такие вещи... Сначала с помощью PHP fgetcsv() считываем первую строку (заголовок), показываем юзеру список полученных полей - пусть сам укажет, что куда заливать, типы данных, короче, что угодно. Когда такая инфа сохранена, то перемещение столбцов никак не повлияет на загрузку, потому что они запоминаются поимённо (а вообще часто приходится сталкиваться с переставленными столбцами?)
При использовании XML алгоритм будет похожий, с той разницей, что в этим случае уже целый геморрой получить список полей (XML ведь иерархический).

&lt;blockquote&gt;если организовать импорт того же CSV но построчно средствами PHP, то можно в скрипте реализовать опрос пользователя на типы каждого столбца&lt;/blockquote&gt;
Связи никакой :] Почему если грузить построчно через PHP, то только тогда можно опрашивать пользователя? Для каждой загружаемой строки это делать? Пусть РНР только опрашивает пользователя о столбцах, а в загрузку пусть не лезет, этот болт не для него - для этого есть другой инструмент.

&lt;blockquote&gt;Для этого просто достаточно проверить наличие в тексте закрывающего корневого контейнера&lt;/blockquote&gt;
Интересный способ проверки удачного завершения операции, но я больше доверяю кодам возврата или ошибки (mysql_error() скажем).

&lt;blockquote&gt;Как только речь идет о внешних клиентах — им надо недоверять, данные проверять&lt;/blockquote&gt;
Так вот, как это сделал я, не потеряв в безопасности и выиграв в скорости: загрузил всю инфу как есть во временную таблицу (CREATE TEMPORARY TABLE), и уже в ней выкусывал/форматировал/удалял что мне надо (PHP запускал нужные запросы). После этого уже чистые данные направлялись в рабочую таблицу.

&lt;blockquote&gt;Забудьте о скорости — нужна надежность&lt;/blockquote&gt;
Как и все обобщения, это утверждение ложно.

Если мы спорим о файликах данных в 1-2 метра, то я могу согласиться даже с ручным написанием INSERT-запросов :] Я веду речь о файлах данных реального мира, отсчёт начиная с 40-50 Мб: я думаю, при вариантах &quot;16 секунд&quot; и &quot;4 часа&quot; пользователь будет меньше всего обеспокоен безопасностью, потому что во втором случае он может просто перестать пользоваться такой &quot;безопасной&quot;, но медленной системой. И что обидно - даже прогресс-бар по-человечески не сделаешь...

P.S. &lt;blockquote&gt;не такие уже индусы глупые&lt;/blockquote&gt;
Я русский, а у меня нет ни ушанки, ни медведя - так что я согласен ;]</description>
		<content:encoded><![CDATA[<p>Короткий ответ: болты лучше откручиваются не молотком, а гаечным ключом. Вариативность нужна.</p>
<p>Теперь подробно.<br />
Если бы я сам не пользовался предложенным в статье методом, я бы его и не советовал другим.</p>
<blockquote><p>При импорте CSV средствами MySQL нет возможности контроля данных. PHP ведь не учавствует — вот и нечем проверить</p></blockquote>
<p>Да, я старался убедить вас, что лучше не грузить большие объёмы данных PHP (неподходящий инструмент). Но никто не запрещает управлять загрузкой с помощью PHP (эдакий командный пункт), запуская нужные запросы, ниже я покажу как.</p>
<blockquote><p>это прямая дорога к SQL-инъекциям и дефейсу</p></blockquote>
<p>На лицо непонимание процесса загрузки: MySQL сервер <em>сам</em> отквочивает что надо. SQL-инъекции возможны как раз из-за использования PHP, с помощью которого нормальный запрос может быть исправлен на вредоносный. Другими словами, я не представляю, куда надо засунуть, скажем, &#8220;<em>DROP DATABASE</em>&#8221; в загружаемый файл, чтобы этот запрос выполнился, eval() тут нет.</p>
<blockquote><p>Или я просто не знаю аналогов addslashes и htmlspecialchars в мускуле</p></blockquote>
<p><a href="http://dev.mysql.com/doc/refman/5.1/en/string-functions.html" rel="nofollow">QUOTE()</a>, но он вряд ли пригодится.</p>
<blockquote><p>Нет возможности подстраиваться под пользовательскую структуру</p></blockquote>
<p>Кто ж хардкодит такие вещи&#8230; Сначала с помощью PHP fgetcsv() считываем первую строку (заголовок), показываем юзеру список полученных полей &#8211; пусть сам укажет, что куда заливать, типы данных, короче, что угодно. Когда такая инфа сохранена, то перемещение столбцов никак не повлияет на загрузку, потому что они запоминаются поимённо (а вообще часто приходится сталкиваться с переставленными столбцами?)<br />
При использовании XML алгоритм будет похожий, с той разницей, что в этим случае уже целый геморрой получить список полей (XML ведь иерархический).</p>
<blockquote><p>если организовать импорт того же CSV но построчно средствами PHP, то можно в скрипте реализовать опрос пользователя на типы каждого столбца</p></blockquote>
<p>Связи никакой :] Почему если грузить построчно через PHP, то только тогда можно опрашивать пользователя? Для каждой загружаемой строки это делать? Пусть РНР только опрашивает пользователя о столбцах, а в загрузку пусть не лезет, этот болт не для него &#8211; для этого есть другой инструмент.</p>
<blockquote><p>Для этого просто достаточно проверить наличие в тексте закрывающего корневого контейнера</p></blockquote>
<p>Интересный способ проверки удачного завершения операции, но я больше доверяю кодам возврата или ошибки (mysql_error() скажем).</p>
<blockquote><p>Как только речь идет о внешних клиентах — им надо недоверять, данные проверять</p></blockquote>
<p>Так вот, как это сделал я, не потеряв в безопасности и выиграв в скорости: загрузил всю инфу как есть во временную таблицу (CREATE TEMPORARY TABLE), и уже в ней выкусывал/форматировал/удалял что мне надо (PHP запускал нужные запросы). После этого уже чистые данные направлялись в рабочую таблицу.</p>
<blockquote><p>Забудьте о скорости — нужна надежность</p></blockquote>
<p>Как и все обобщения, это утверждение ложно.</p>
<p>Если мы спорим о файликах данных в 1-2 метра, то я могу согласиться даже с ручным написанием INSERT-запросов :] Я веду речь о файлах данных реального мира, отсчёт начиная с 40-50 Мб: я думаю, при вариантах &#8220;16 секунд&#8221; и &#8220;4 часа&#8221; пользователь будет меньше всего обеспокоен безопасностью, потому что во втором случае он может просто перестать пользоваться такой &#8220;безопасной&#8221;, но медленной системой. И что обидно &#8211; даже прогресс-бар по-человечески не сделаешь&#8230;</p>
<p>P.S.<br />
<blockquote>не такие уже индусы глупые</p></blockquote>
<p>Я русский, а у меня нет ни ушанки, ни медведя &#8211; так что я согласен ;]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
