|
|
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
Ребята подскажите если я извлекаю подстроку из большой строки(MEDIUMTEXT) Mysql грузит всю строку в память, а потом обрезает или он это делает прямо на диске? Вопрос в том т.к. текст очень большой и таких операций будет очень много, оперативка будет перегружена, если же в память грузится только вырезанная часть строки, большой нагрузки не будет. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 13:48 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
Сервер на диске НИЧЕГО делать не может. Этим занимается дисковая подсистема операционки. Да, ВСЯ строка грузится в память (вернее, все страницы, которые необходимы для сборки этой строки). Гость2016текст очень большой и таких операций будет очень много, оперативка будет перегруженаДобавь оперативки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 13:55 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
Akina, вот сдесь мне думается ты ошибаешся... из документации Each BLOB or TEXT value is represented internally by a separately allocated object. This is in contrast to all other data types, for which storage is allocated once per column when the table is opened. тоесть не нужно считать, что если мы гдето упомянули поле типа блоб, всё - оно тутже грузится. оно не грузится, туда помещается обьект, который может выдать любую часть блоба --- если select * from table. да, передать значение надо целиком, грузить надо целиком. Но - сдесь невозникнет проблемы даже если блоб на 50Гб, а обьём максимального пакета всего 1Кб. мускл сам разрулит проблему, и никакие 50Гб даже, 10Мб одновременно в памяти не окажутся (разве что в буферах если есть возможность) если select ... from ... where instr(....using blob...) - вот на этой проверке будет тормоза, но не изза памяти, а изза того что хоть что делай , кроме как перечитать с винчестера все 50Гб для проверки наличия подстроки нету. если в веар несколько проверок, которые могут потребовать пересмотра всех 50Гб, а на сервере оперативки 128Гб, не стоит ожидать что вторая и дальше проверки пройдут быстро...ибо этот обьект, котоырй представляет блоб, не имеет ни чего общего с общей логикой кеша и буферов ИнноДБ и мускла, 99.9% что во время первой проверки, более гига в памяти одновременно не окажется, ибо проверка куда более быстрый процесс чем чтение шдд, поэтому по мере продвижения по блобу, уже считаные и провереные на подстроку блоки будут удалятся из памяти. именно потому что блоб изначально задуман как очень большой(логически ничем не ограничен) обьём данных, работа с ним отличается от обычных полей. в таблицах типа мемори такого поля быть не может, подобное значение априори не представимо в памяти, оно всегда является файлом(логически) - мы можем бегать по нему, считывать кусок, записывать кусок. ---------- переживать надо за другое, храня подобные данные. ... если автор хорошо тестирует приложение, тогда может не переживать - клювом стукнется во все нюансы связанные с этим :: загрузка данных ограничена мак_пакет_сайз, если вставка защёт функции фром_файл, мускл сам рулит, если командой инсерт то либо по принципу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 19:58 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
блин...пропала часть писанины, обламало писать заново... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 20:04 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
Гость2016 извлекаю подстроку из большой строкиЕсли это понимать буквально: Код: sql 1. То, думаю, содержимое поля все равно будет прочитано целиком, несмотря на то, что фактически нужен только маленький начальный кусочек. С BLOB-ами вообще все не так просто, например: http://dev.mysql.com/doc/refman/5.5/en/blob.html Instances of BLOB or TEXT columns in the result of a query that is processed using a temporary table causes the server to use a table on disk rather than in memory because the MEMORY storage engine does not support those data types (see Section 8.4.4, “Internal Temporary Table Use in MySQL”). Use of disk incurs a performance penalty, so include BLOB or TEXT columns in the query result only if they are really needed. For example, avoid using SELECT *, which selects all columns. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 21:14 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 , ты говоришь не о том, о чём я. А о чём говорит ТС, я пока не понял, но явно о чём-то третьем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2016, 14:05 |
|
||
|
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
|
|||
|---|---|---|---|
|
#18+
хочу поигратся... блин, это не тривиальная задача загрузить в блоб большой обьём. если кому интерестно, то грузя через пхп(подготовленное выражение и спецальный метод у mysqli для загрызмки больших параметров) ОШИБКА если 1) обьём больше 10% от размера иннодб_лог_файла 2) почему то выдало ошибку при обьеме больше max_packet_size хотя я вроде как читал, что этот метод для загрузки больших данных иммено и нужен дабы обойти размер пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2016, 15:16 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39294593&tid=1831473]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 477ms |

| 0 / 0 |
