ФорумПрограммированиеPHP для идиотов → Хранение массива переменного размера в MySQL

Хранение массива переменного размера в MySQL

  • gooddaytoday

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 10:13

    Появилась загвоздка, с которой сложно справиться имея в руках одни учебники и google))

    От пользователя приходит массив из числовых элементов. К примеру: 3, 6,9, 16 и т.д. Может Васе Пупкину(затрахали его, наверное уже юзать в объяснялках) нужно сохранить 5 элементов или 10. А может и все 30. Так вот я из репы своей никак не "вычешу" правильное решение.

    Каким именно образом сохранять массив переменной величины? Чтобы этот способ был наиболее быстрый и менее затратный по ресурсу проца и занимаемого места. Навскидку знаю только два варианта:
    1) Массив сериализуется - записывается в строку. Жутко длинно выодит по памяти+операции сериализации-десериализации могут поднапрячь систему. Эта строка записывается потом в VARCHAR.
    2) В БД создается, скажем, 50 полей для одной записи. Массив записывается в них "как есть". Если он меньше - то ок, если больше, то обрезается.

    Можете какой-нибудь совет дать на этот счет?
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2011 г. 10:22, спустя 9 минут 7 секунд

    хранить в одной строке тупо через пробел? "1 2 3 4 5 6"
    Спустя 85 сек.
    далее чето типа такого

    $ids = "1 2 3 4";
    $id = split(" ", $ids);
    echo $id[0];
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2011 г. 10:28, спустя 6 минут 23 секунды

    В строковое поле бд.
    serialize($array);


    Много места будет занимать, это да. А вообще что за массив? Какие данные?

    Ппц чето к вечеру читаю между строк, а в строки не попадаю :) Думаю самый нормальный вариант это сериализация.
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2011 г. 10:27, спустя 23 часа 58 минут 47 секунд

    просто числа - implode/explode c разделителем (точка с запятой)
    это если по ним поиск не надо делать
    не всё полезно, что в swap полезло
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2011 г. 10:31, спустя 3 минуты 26 секунд


    просто числа - implode/explode c разделителем (точка с запятой)
    это если по ним поиск не надо делать

    +1
  • adw0rd

    Сообщения: 22936 Репутация: N Группа: в ухо

    Spritz 2 февраля 2011 г. 11:18, спустя 47 минут 18 секунд

    gooddaytoday, связанную таблицу как вариант
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • gooddaytoday

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 11:46, спустя 27 минут 52 секунды

    А можно поподробнее насчет связанной таблицы?

    По поводу поиска. Нужно будет просматривать регулярно всю таблицу с массивами и искать соответствие. К примеру, Юзер №55 задает свой массив 4,6,14,19 из 4-х значений. И нужно будет проверить какие уже существующие массивы в БД имеют такие же значения.

    Потому-то пока я склоняюсь ко своему второму варианту. Он только нубским выглядит. Надеюсь существует более изящное решение, такое же незатратное по производительности.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2011 г. 12:20, спустя 34 минуты 5 секунд

    Каждому пользователю соответствует отдельный массив, и нужно найти пользователей, в "чьих массивах" есть элементы из определенного массива?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 12:28, спустя 8 минут 15 секунд


    А можно поподробнее насчет связанной таблицы?

    По поводу поиска. Нужно будет просматривать регулярно всю таблицу с массивами и искать соответствие. К примеру, Юзер №55 задает свой массив 4,6,14,19 из 4-х значений. И нужно будет проверить какие уже существующие массивы в БД имеют такие же значения.

    Потому-то пока я склоняюсь ко своему второму варианту. Он только нубским выглядит. Надеюсь существует более изящное решение, такое же незатратное по производительности.


    если похожие то регексп, а если равные то ваще проблем не вижу тупо сравниваешь и всё, можно триггер создать отдельный, который будет лепить тебе из строки массив
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 13:24, спустя 56 минут 11 секунд

    что за задача такая, что сериализация напряжет интерпретатор?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 14:34, спустя 1 час 9 минут 27 секунд


    что за задача такая, что сериализация напряжет интерпретатор?


    сериализация трудоёмкая задача, могу показать реальный пример когда при сериализации скрипт работает 7 секунд чтобы расчитать лицо человека, а если не сеарилизовать то работает 2 секунды
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 14:42, спустя 7 минут 51 секунду

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

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 14:52, спустя 9 минут 56 секунд

    Да я сам офигеваю от того, какую задачу захотел решить… Моего уровня знаний пока наверное, мало.

    Представить себе 100 запросов в секунду(по минимальным прикидкам), которые постоянно будут наполнять базу(до max ~ 100-200 тыс. записей), проверяя наличие в ней введенного массива и добавлять его если такового нет. И еще 20-30 запросов, которые делают поиск на вхождение части введенного массива в существующие.

    http://www.ozon.ru/context/detail/id/2908257/ - это самая лучшая книга по MySql?
  • truth4oll

    Сообщения: 463 Репутация: N Группа: Адекваты

    Spritz 2 февраля 2011 г. 15:36, спустя 44 минуты 2 секунды

    а битовые маски здесь не прокатят?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 2 февраля 2011 г. 17:51, спустя 2 часа 14 минут 55 секунд

    >это самая лучшая книга по MySql?

    там ниже отзыв стоит написано что хуета

Пожалуйста, авторизуйтесь, чтобы написать комментарий!