SQL.RU
 client/server technologies
 
 Главная | Документация | Статьи | Книги | Форум | Опросы | Рассылка | Работа | Поиск | FAQ |

Добро пожаловать в форум, Guest  >>  Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик  Ответить
 blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
Привет!
у меня диллема. Выбираю между типом blob и текстовым для хранения сравнительно больших размеров данных.

Есть таблички с простой структурой:

1)Количество записей ориентировочно до 100-200 тысяч.
ID:USER_ID:USER_DETAIL
выборка только по USER_ID, тесктовое поле из 7 байт, поэтому только для него индекс.
Там должны представлены разные свойства для текстовых полей из другой таблицы:

2)Количество записей может достигать 10-20 тысяч
ID:TEXT_ID:TEXT:bla-bla1:bla-bla2...
Не играет роль что в ней и какого она размера.

При каждой генерации web-странички есть выборка как из первой таблицы, так и из второй.
Для первой таблица SQL запросы ограничиваются командами SELECT, INSERT, UPDATE.
Но этот апдейт очень частое явление. Ориентировочно при каждой генерации страницы будут как селекты так и апдейты.

Так вот, для каждого USER_ID есть 13 свойств каждого объекта TEXT_ID.
Можно конечно составить матричную структуру, где будет соответствие USER_ID и TEXT_ID. например так:
ID:USER_ID:TEXT_ID:SVOJSTVO
но тогда пришлось бы делать индекс по двум полям,а количество записей = 100-200 тысяч * 10-20 тысяч = 1-4 миллиарда
А для интенсивной работы, критичной к времени ответа(веб-приложение) это не реально.

Поэтому я решил каждому пользователю в первой базе в одной записи заносить информацию обо всех свойствах всех TEXT_ID в USER_DETAIL.
Для USER_DETAIL есть несколько путей:

1) простейший. текстовой поле, не фиксированной длины, где каждый символ однозначно определяет свойство TEXT_ID.
Например текст "0304AD" Определяет свойства, которые применяются в логике веб-приложения, для TEXT_ID=1 ... до TEXT_ID=6
Плюсы в том, что довольно легко внутри приложения обрабатывать, позиция символа определяет TEXT_ID, а сам символ свойство.
Минусы в том, что существует огромная избыточность. Насколько я помню видимая часть ASCII состоит 95 символов, а задействовано будет только 13.
Второй минус в том, что поле может достигать 20КБ (по количеству TEXT_ID). Я просто не знаю насколько быстр мускул будет в интенсивной работе с запросами, где каждый ответ достигает 20кил. Или того хуже - постоянные апдейты.
Реально размер может быть 4Кб (текстов около 4 тысяч)

2) поле типа BLOB, где один байт содержит информацию об двух TEXT_ID.
Так как данные хранятся в бинарном виде, можно использовать всю палитру в 256 символов.
Один символ как например 10011011, первые 4 бита содержат информацию об TEXT_ID=1, а второй о четном TEXT_ID=2
Тут существует тоже некоторая избыточность, что для 13 состояний используется 16. но она не такая большая.
В этом варианте мы экономим место (в два раза), но усложняюется логика в приложении по расчету TEXT_ID, из этого бинарного файла. Размер получается до 10 кил.
Реально размер может быть 2Кб (текстов около 4 тысяч)

Есть еще одна задача, при котором количество свойств ограничено тремя. Остальными десятью можно пренебречь.
Тогда первый вариант не изменяется, но во втором варианте на каждый байт можно записать информацию об четырех текстах.
Сокращение размера еще в два раза. Рельный размер около 1КБ, а максимальных до 5 КБ

Так вот. Я склоняюсь ко второму варианту, так как он легок для программирования, хотя в прилодении второй вариант может работать даже быстрее, все же битовые операции.
Но смущают постоянные выборки и апдейты с запросами такой длины. Насколько разница может быть с вторым или даже с третьим вариантом, при прочих равных условиях?
Тут может быть будут играть роль и тип поля. С каким-то мускул работает медленнее, с каким-то быстрее.
Кстати, размер каждый день может наращиваться, так как будет прибавляться TEXT_ID по несколько в день
22 фев 07, 12:12    [3821404] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 14193
Мужик, вообще-то в реляционных базах данных данные в таблицах принято хранить. Они, прикинь, таблицы в основном заточены обрабатывать. Ты не знал ?
22 фев 07, 12:16    [3821433] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 14193
автор
но тогда пришлось бы делать индекс по двум полям,а количество записей = 100-200 тысяч * 10-20 тысяч = 1-4 миллиарда
А для интенсивной работы, критичной к времени ответа(веб-приложение) это не реально.


Время индексного поиска пропорционально логарифму от объема таблицы.
Возьми свои 1-4 миллиарда, вычисли логарифм и посчитай кол-во цифар до десятичной точки.
22 фев 07, 12:19    [3821451] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
Время индексного поиска пропорционально логарифму от объема таблицы.
Возьми свои 1-4 миллиарда, вычисли логарифм и посчитай кол-во цифар до десятичной точки.

А теперь представим:
пользователей 100.000
текстов 10.000

Первый вариант:
USER_ID(7):USER_DETAIL(10.000)
Индекс по USER_ID
Записей 100.000
Размер всей таблицы около 1GB, индекс около 1 МБ

Второй вариант:
USER_ID(7):USER_DETAIL(5.000)
Индекс по USER_ID
Записей 100.000
Размер всей таблицы около 0.5GB, индекс около 1 МБ

Последний вариант:
USER_ID(7):TEXT_ID(5):SVOJSTVO(1)
Индекс по USER_ID и TEXT_ID
Записей 1 млрд.
Размер всей таблицы около 13GB, индекс около 12 GB

Насколько я понимаю, если индекс хранится в памяти, то работает все быстрее, хотя даже 1GB таблицу всю можно хранить, а вот у последнего варианта даже индекс не уместится в память

Может я шде-то не прав, но мне представляется работа базы так.
22 фев 07, 12:37    [3821641] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
Хотя в последнем варианте можно и ограничиться индексом по USER_ID, что уменьшит индекс до 7GB, но особой роли это не сыграет
22 фев 07, 12:40    [3821687] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
1) а что за дуратские текстовые ID длиной 7 байт? используйте числовые ID
если есть необходимость хранить длинные логины пользователей, заведите отдельную таблицу:
USERID:USERLOGIN, где USERID типа INT (4 байта), а USERLOGIN - текстовое поле длиной хоть 7, хоть 207 символов, и работайте в остальных таблицах и в веб-приложении с USERID
аналогично и TEXTID, если текстов меньше 65 тысяч, то для их id можно использовать и SMALLINT (2 байта)
для таблицы с "матрицей" получите экономию места почти в 2 раза
2) размер индексов вы считаете неправильно
для MyISAM таблиц максимальный размер индекса считается по формуле:
(длина ключа + 4) / 0.67 * кол-во записей
т.е. размер индекса по полю в 4 байта для 4 млрд записей будет примерно 50 гб (это конечно в худшем случае)
http://dev.mysql.com/doc/refman/5.0/en/key-space.html
3)
alex bw
Я просто не знаю насколько быстр мускул будет в интенсивной работе с запросами, где каждый ответ достигает 20кил.

запрос типа SELECT USER_DETAIL FROM users WHERE ID=1 будет отрабатывать практически моментально, 20 кб - это мало :)
4) все зависи от того, какие запросы будут делаться к базеи как часто...
что происходит при генерации страницы? когда происходят update'ы таблиц? опишите подробнее
например, если нужно выбрать сразу свойства всех текстов для одного пользователя, вариант с хранением свойств в одном текстовом поле на мой взгляд хорош (вам не нужен индекс по id текстов, не нужно выбирать конкретный текст и свойства, нужно выбрать сразу все свойства для данного пользователя - запрос SELECT USER_DETAIL FROM users WHERE ID=1 отработает очень быстро, дальше обработаете строку как надо)
если же нужно часто обновлять/добавлять эти свойства, этот способ плох
допустим, у вас часто будет выполняться запрос на изменение даже одного свойства у одного текста, но для всех пользователей: придется выбирать 200 тыс записей по 20 килобайт, изменять в них один байт и снова записывать в таблицу!
при добавлении одного текста вам поять же придется увеличить на 1 байт каждую запись из 200 тысяч, подозреваю, что это будет происходить ОЧЕНЬ долго
выбор структуры таблиц зависит от запросов, которые нужно выполнять


MasterZiv
Время индексного поиска пропорционально логарифму от объема таблицы.
Возьми свои 1-4 миллиарда, вычисли логарифм и посчитай кол-во цифар до десятичной точки.
это-то верно, но по формуле выходит что для индекса по двум INT полям длиной 4 байта и 4 млрд записей его максимальный размер составит 72 гб, на сервере может банально не оказаться столько места на диске :)


P.S.
А для чего вообще это нужно? Хранить соответствия между ВСЕМИ пользователями и ВСЕМИ текстами? Может быть, стоит начать с продумывания того, как уменьшить количество этих соответствий?
22 фев 07, 21:52    [3825302] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
Что касается выбора BLOB/TEXT - думайте сами, что вам нужно. Вы все правильно написали: TEXT - будет больше занимать, но меньше расчетов в программе, BLOB - наоборот. Если критично место на диске, делайте через BLOB.
И еще я не понял, что значит 13 свойств. У комбинации USERID-TEXTID может быть только одно свойство из 13ти и вам нужно указать какое именно? Или каждое из 13ти свойств - это логическая переменная есть/нет (т.е. связка USERID-TEXTID может обладать например свойствами 1,3,7 и не обладать остальными)? Если последнее, то ваши расчеты не верны, для хранения 13 свойств нужно будет 13 бит минимум, а не 4.
22 фев 07, 22:03    [3825322] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
Nick Anikin
1) а что за дуратские текстовые ID длиной 7 байт? используйте числовые ID
если есть необходимость хранить длинные логины пользователей, заведите отдельную таблицу:
USERID:USERLOGIN, где USERID типа INT (4 байта), а USERLOGIN - текстовое поле длиной хоть 7, хоть 207 символов, и работайте в остальных таблицах и в веб-приложении с USERID
аналогично и TEXTID, если текстов меньше 65 тысяч, то для их id можно использовать и SMALLINT (2 байта)
для таблицы с "матрицей" получите экономию места почти в 2 раза

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

2) размер индексов вы считаете неправильно
для MyISAM таблиц максимальный размер индекса считается по формуле:
(длина ключа + 4) / 0.67 * кол-во записей
т.е. размер индекса по полю в 4 байта для 4 млрд записей будет примерно 50 гб (это конечно в худшем случае)
http://dev.mysql.com/doc/refman/5.0/en/key-space.html
3)
alex bw
Я просто не знаю насколько быстр мускул будет в интенсивной работе с запросами, где каждый ответ достигает 20кил.

запрос типа SELECT USER_DETAIL FROM users WHERE ID=1 будет отрабатывать практически моментально, 20 кб - это мало :)

за это отдельное спасибо!

4) все зависи от того, какие запросы будут делаться к базеи как часто...
что происходит при генерации страницы? когда происходят update'ы таблиц? опишите подробнее
например, если нужно выбрать сразу свойства всех текстов для одного пользователя, вариант с хранением свойств в одном текстовом поле на мой взгляд хорош (вам не нужен индекс по id текстов, не нужно выбирать конкретный текст и свойства, нужно выбрать сразу все свойства для данного пользователя - запрос SELECT USER_DETAIL FROM users WHERE ID=1 отработает очень быстро, дальше обработаете строку как надо)
если же нужно часто обновлять/добавлять эти свойства, этот способ плох
допустим, у вас часто будет выполняться запрос на изменение даже одного свойства у одного текста, но для всех пользователей: придется выбирать 200 тыс записей по 20 килобайт, изменять в них один байт и снова записывать в таблицу!
при добавлении одного текста вам поять же придется увеличить на 1 байт каждую запись из 200 тысяч, подозреваю, что это будет происходить ОЧЕНЬ долго
выбор структуры таблиц зависит от запросов, которые нужно выполнять

Есть два типа веб-страниц, где типичные запросы такие
1) селект к обоим таблицам. без апдейтов
2) селект из второй таблицы и апдейт ее же.
Именно SELECT USER_DETAIL FROM users WHERE ID=1 и будет присутствовать в обоих вариантах.
Апдейт второй таблицы происходит для конкретного пользователя, но не для всех одновременно.
Возможна ситуация, при которой при количестве текстов 10.000, у одного пользователя может храниться USER_DETAIL размером 8564, а у другого 9688, и у третьего 10.000
Все зависит от того, с каким поселдним текстом имел дело юзер. обновление происходит для конкретного пользователя по мере необходимости. И ни в коем случае не для всех одновременно.
Так как по сути эти свойства не самих текстов, а отношения конкретного пользователя с конкретным текстом.


P.S.
А для чего вообще это нужно? Хранить соответствия между ВСЕМИ пользователями и ВСЕМИ текстами? Может быть, стоит начать с продумывания того, как уменьшить количество этих соответствий?

У меня сейчас и стоит выбор между 3 и 13 состояниями текста для конкретного пользователя, но это не принципиально.

А пример для трех состояний может быть таков:
User=1 и Text=1, состояния такие как "непрочтен/не прочтен", "занесен в фавориты"
Тогда в случае простого текстового обозначения состояния можно использовать такие варианты как:
0= непрочтен
1= прочтен
2= прочтен и занесен в фавориты

В случае с побитным отображением, для типа blob:
один байт может содержать информацию о 4 текстах, где пара битов:
00= непрочтен
10= прочтен
11= прочтен и занесен в фавориты

автор
Что касается выбора BLOB/TEXT - думайте сами, что вам нужно. Вы все правильно написали: TEXT - будет больше занимать, но меньше расчетов в программе, BLOB - наоборот. Если критично место на диске, делайте через BLOB.
И еще я не понял, что значит 13 свойств. У комбинации USERID-TEXTID может быть только одно свойство из 13ти и вам нужно указать какое именно? Или каждое из 13ти свойств - это логическая переменная есть/нет (т.е. связка USERID-TEXTID может обладать например свойствами 1,3,7 и не обладать остальными)? Если последнее, то ваши расчеты не верны, для хранения 13 свойств нужно будет 13 бит минимум, а не 4.

А для 13 состояний побитно несколько сложнее, но тоже реализуемо четырьмя битами (максимум 16 состояний)
Можно ведь добавить состояние, не равное "да/нет", а например 5-балл.оценку
Тогда получаем такие 13 вариантов:
0000= непрочтен
1000= прочтен
1001= прочтен, оценка "1"
1100= прочтен и занесен в фавориты
1101= прочтен и занесен в фавориты, оценка "1"
...
я уже придумал таблицу соответствий
23 фев 07, 12:51    [3826517] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
alex bw
А для 13 состояний побитно несколько сложнее, но тоже реализуемо четырьмя битами (максимум 16 состояний)
Можно ведь добавить состояние, не равное "да/нет", а например 5-балл.оценку
для 5ти баллов 4 бита все равно не хватит :) 1 бит - это прочитал/нет, 2ой бит - фаворит/нет, остается два байта, но ими вы закодируете максимум 4 балла :)

по поводу вашей задачи:
1) вариант с TEXT/BLOB конечно имеет право на жизнь, но у него следующие минусы:
- если тектсты, например, удаляются, что вы будете делать? придется либо хранить лишние байты "посередине" айдишников текстов, либо перенумеровывать все тексты
- вы теряете гибкость вашего приложения, т.е. вы уже не сможете работать с базой только лишь с помощью SQL запросов, необходима будет ваша программная надстройка, которая "умеет" обрабатывать данные в BLOB'ах (допустим, вас заинтересует некоторая статистика по базе, придется дописывать свою программу)
- некоторая избыточность, например, пользователь прочитал всего один, но последний по списку текст, вам придется записать для него все 20 кб данных (если текстов 20 000), чтобы указать последний байт (в методе с матрицей достаточно для такого пользователя одной записи)
- дополнительные ресурсы потеряются на просчеты блобов
2) доводы за метод с "матрицей":
- почему вы считаете, что комбинаций будет 4 млрд.? это конечно максимально число, но неужели все пользователи прочитают все тексты? :) мне так кажется, что каждый пользователь максимум процентов 10 текстов прочитает, или я ошибаюсь? если у вас есть сейчас какая-то база с данными, оцените по ней, сколько именно прочитанных текстов имеется, - получите реальное количество записей, которое у вас будет
что-то мне подсказыват, что их получится не 4 млрд., а на порядок или даже на два меньше :)
- если размер этой матрицы будет на порядок меньше, чем вы оценили, большинство запросов работать будет быстрее, чем в методе с блобом
3) а действительно ли вам необходимо хранить, какой именно юзер какую оценку оставил для данного текста? не достаточно будет хранить просто кол-во голосов и среднюю оценку для каждого текста?
23 фев 07, 16:33    [3827085] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
С вами интересно ;)
Nick Anikin
для 5ти баллов 4 бита все равно не хватит :) 1 бит - это прочитал/нет, 2ой бит - фаворит/нет, остается два байта, но ими вы закодируете максимум 4 балла :)

Не совсем верно. Не помню что за курс был у нас на радиотехнике (давно было :), что-то с вычислением и оптимизацией двоичных матриц, так вот...
я сократил так:
0000 - не прочитан
0001 - не используется
0010 - не используется
0011 - не используется
0100 - прочитан и в фаворитах, с оценкой (соответственно таблице в приложении)
0101 - прочитан и в фаворитах, с оценкой (соответственно таблице в приложении)
0110 - прочитан и в фаворитах, с оценкой (соответственно таблице в приложении)
0111 - прочитан с оценкой (соответственно таблице в приложении)
1000 - прочитан
1001 - прочитан с оценкой (соответственно таблице в приложении)
1010 - прочитан с оценкой (соответственно таблице в приложении)
1011 - прочитан с оценкой (соответственно таблице в приложении)
1100 - прочитан и в фаворитах
1101 - прочитан и в фаворитах, с оценкой (соответственно таблице в приложении)
1110 - прочитан и в фаворитах, с оценкой (соответственно таблице в приложении)
1111 - прочитан с оценкой (соответственно таблице в приложении)

При этом вычисление о прочитанности можно свести к формуле "B1 AND B2"
вычислить фаворит можно так: "((B3 AND B4) XOR 1) AND B2"


по поводу вашей задачи:
1) вариант с TEXT/BLOB конечно имеет право на жизнь, но у него следующие минусы:
- если тектсты, например, удаляются, что вы будете делать? придется либо хранить лишние байты "посередине" айдишников текстов, либо перенумеровывать все тексты
- вы теряете гибкость вашего приложения, т.е. вы уже не сможете работать с базой только лишь с помощью SQL запросов, необходима будет ваша программная надстройка, которая "умеет" обрабатывать данные в BLOB'ах (допустим, вас заинтересует некоторая статистика по базе, придется дописывать свою программу)
- некоторая избыточность, например, пользователь прочитал всего один, но последний по списку текст, вам придется записать для него все 20 кб данных (если текстов 20 000), чтобы указать последний байт (в методе с матрицей достаточно для такого пользователя одной записи)
- дополнительные ресурсы потеряются на просчеты блобов

согласен, минусы некоторые имеются.
- тексты не удаляются, они могут только скрываться от взгляда, изменяться.
- это самый сильный аргумент против блоба, и он имеется. Что меня в общем и отвратило от этого варианта.
- тоже имеет место быть. сильный аргумент против.
- подпадает во второй пункт. Блобы хороши так для очень объемного прилодения (например 10 млн юзеров и 100.000 текстов :)

2) доводы за метод с "матрицей":
- почему вы считаете, что комбинаций будет 4 млрд.? это конечно максимально число, но неужели все пользователи прочитают все тексты? :) мне так кажется, что каждый пользователь максимум процентов 10 текстов прочитает, или я ошибаюсь? если у вас есть сейчас какая-то база с данными, оцените по ней, сколько именно прочитанных текстов имеется, - получите реальное количество записей, которое у вас будет
что-то мне подсказыват, что их получится не 4 млрд., а на порядок или даже на два меньше :)
- если размер этой матрицы будет на порядок меньше, чем вы оценили, большинство запросов работать будет быстрее, чем в методе с блобом

К сожалению у меня нет возможности практически это узнать. Вот и приходится рассчитывать даже на максимум, хотя дедуктивным методом мне кажется эта цифра в конкретном случае может достигать 30-40%

3) а действительно ли вам необходимо хранить, какой именно юзер какую оценку оставил для данного текста? не достаточно будет хранить просто кол-во голосов и среднюю оценку для каждого текста?

Так и будет для каждого текста, а хранение пользовательской оценки не было целью, это пришло только от избыточности количества информации на один байт. Достаточно хранить просто 3 состояния (не читал/читал/фаворит)
Просто в случае с TEXT полем не играет роль, 3 или 13 состояний.
И в случае базы такого типа
User_ID=INT(4):Text_ID=SMALLINT(2):SOSTOJANIE=TINYINT(1)
все равно она внушительна: 100.000*6.000 полей (при 30% заполнении)=600 млн записей (индекс на 12.5 гигов)
против варианта User_ID=INT(4):SOSTOJANIE=LONGTEXT() c 100.000 записями (индекс на полтора мегабайта)
Хотя думаю работать матрица будет офигительно быстро, особенно если диски сказевые и памяти гигов 16 :)
Но у меня к сожалению только SATA и 2 гига RAM.

Думаете серьезно скорость будет отличаться?
23 фев 07, 17:35    [3827250] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
ошибся здесь:
При этом вычисление о прочитанности можно свести к формуле "B1 AND B2"

надо "B1 OR B2"
23 фев 07, 17:37    [3827253] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
alex bw
При этом вычисление о прочитанности можно свести к формуле "B1 OR B2"
вычислить фаворит можно так: "((B3 AND B4) XOR 1) AND B2"
ну, если уж так оптимизировать, можно и файл с индексом архиватором сжимать для экономии места ;)
я бы лучше потратил лишний бит на хранение данных, чем делать столько лишних вычислений :)

короче говоря, мне кажется, в способе с матрицей объемы таблиц будут все-таки слишком большими, и чтение этих гигабайт с жесткого диска ваш веб сервер погубит (хотя я все же не верю, что каждый пользователь прочитает аж 6000 текстов, правда не знаю, что за тексты :))

я бы сделал через BLOB и хранил по 2 бита на текст (в этом случае все-таки экономия в 4 раза по сравнению с текстом), получите для 200 000 пользователей и 20 000 текстов даже при максимальном заполнении таблицу размером в 1 гб и индекс по userid максимум 2,5 мб, при вашей конфигурации сервера даже сама таблица целиком влезет в память
23 фев 07, 18:45    [3827412] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 14193

alex bw пишет:

> Насколько я понимаю, если индекс хранится в памяти, то работает все
> быстрее, хотя даже 1GB таблицу всю можно хранить, а вот у последнего
> варианта даже индекс не уместится в память

Индексы НИКОГДА не хранятся целиком в памяти.
Вообще ничего не хранится в памяти целиком.
Если это конечно не таблица с типом = MEMORY.

Я не понял ничего про ваши примеры.

Posted via ActualForum NNTP Server 1.4

24 фев 07, 19:00    [3828768] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
MasterZiv

Индексы НИКОГДА не хранятся целиком в памяти.
Вообще ничего не хранится в памяти целиком.

если key cache достаточно большой, по мере выполнения запросов все бОльшая и бОльшая часть индекса будет попадать в него, удаляется он оттуда, только если необходимо место в кеше под что-то другое для более новых запросов, так почему в кеш не может попасть весь индес? может вообще key cache урезать до 1 мб? пусть индекс с жесткого диска читается ;)
кроме того, есть даже специальная команда на загрузку индекса целиком в key cache:
http://dev.mysql.com/doc/refman/5.1/en/index-preloading.html
26 фев 07, 14:49    [3832683] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
Спасибо за помощь!
остановился все-таки на текстовом варианте...
что-то двоичная обработка слишком уж осложнена. Да и к тому же отпадает необходимость в одной таблице, которая здесь не указывалась
28 фев 07, 19:10    [3845200] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
DocAl
Member

Откуда: Оккупирую западный берег
Сообщений: 10441
Вот стоит на две недели отлучиться, так такие кошмарики повылазят...
28 фев 07, 20:08    [3845406] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
Nick Anikin
Member

Откуда: Москва
Сообщений: 2168
DocAl
Вот стоит на две недели отлучиться, так такие кошмарики повылазят...
:-)
28 фев 07, 21:13    [3845518] Ответить | Цитировать    Сообщить модератору

 Re: blob vs text (для больших размеров данных)   [new]
alex bw
Member

Откуда:
Сообщений: 10
DocAl
Вот стоит на две недели отлучиться, так такие кошмарики повылазят...

а в чем кошмарик? ;)
2 мар 07, 11:47    [3852754] Ответить | Цитировать    Сообщить модератору

Все форумы / MySQL Ответить
Generated time: 187ms.
Rambler's Top100 Powered by ActualForum 1.5.3 [s1] Copyright (c) Alex Sibilev 2000-2010