За последние 24 часа нас посетили 20050 программистов и 1722 робота. Сейчас ищут 1627 программистов ...

Есть какие-то способы сериализации в базу ?

Тема в разделе "PHP для профи", создана пользователем XNP, 5 июл 2018.

  1. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Собственно имею массу данных в виде php объектов сериализованных в файлы. (более миллиона штук, десятки самих объектов).

    Можно ли как-то средствами php либо сторонними небольшими библиотеками сериализовывать их в БД с минимальным объемом написанного кода ? (в идеале, конечно, даже тип полей по содержимому детектить, но это не обязательно).

    Разумеется не в виде таблиц с блобами, а с разборкой по полям.
    Так, чтобы из
    class Person {
    public $name;
    public $family;
    }

    Получилась таблица Person с столбцами Name - Family и соответствующим содержимым, можно было получить код для create table итд итп.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно
     
  3. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Можно - это отлично.
    Как ?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как что? как информацию в бд писать?
     
  5. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Именно. Как не занимаясь написанием кода для каждого класса сериализовать его в БД ?

    Может есть готовые библиотеки какие-то.
    Чтобы вызвать что-то типа
    SerializeToDB($dbname, $person)
    и получить строку в таблице person где в каждой ячейке одно из полей person


    Вопрос не стоит в том, как ВРУЧНУЮ написать инсерты итп. Это никому не нужно.

    Простая сериализация в текст ведь не требует от класса никаких дополнительных методов.
    Для DB такое как-нибудь реализованно ?
     
    #5 XNP, 5 июл 2018
    Последнее редактирование: 5 июл 2018
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    никак

    ладно

    я не знаю, как у вас там что сериализуется в текст. сериализация это общий термин, а не конкретный способ.
    но в общем случае объекты сами по себе в бд не запрыгивают
    с другой стороны, бд всё равно что заданные вы в неё пихаете

    и ещё, если вы сериализуете их в json, то можно пихать, и некоторые бд сами вам позволят обращаться с полями итогового json как с полями таблицы: строить индексы и делать выборки
     
  7. johovich

    johovich Активный пользователь

    С нами с:
    24 авг 2016
    Сообщения:
    146
    Симпатии:
    17
    Насколько я понял, ты хочешь функцию, которая сможет получать на входе имя таблицы и некий объект, записывать это в бд, используя свойства объекта в качестве полей таблицы, а значения свойств в качестве значений таблицы.
    Причем тут сериализация?

    Любой приличная библиотека для работы с бд умеет такое делать. Я сейчас пользуюсь либой для мускула. Вот бы как в ней выглядел вызов для того, что ты просишь.

    Код (Text):
    1.  
    2. function todb(string $table, object $data){
    3. global $db_conf;
    4. $db = new Simpledb($db_conf);
    5. return $db->query("INSERT INTO `$table` SET ?u", $data);
    6. }
    Достаточно компактно?
     
  8. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Обобщенно - да.

    Этот процесс так называется :), и согласно википедии тоже
    Сериализация — это процесс преобразования объекта в поток байтов для сохранения или передачи в память, базу данных или файл.
    Впрочем не будем о терминах, это контрпродуктивно.

    Да, вполне.
    Можно ссылочку, а то сплошной амазон ищется с его saas db ?
    (+ какие-то старые непонятные форки)
    Умеет ли она как-то создавать сами таблицы ориентируясь на данные ?
    Я уже, в принципе "запилил свой велик", но не хотелось бы его поддерживать.

    В $data какие-то методы, переменные или что-то еще требуются ?
     
  9. johovich

    johovich Активный пользователь

    С нами с:
    24 авг 2016
    Сообщения:
    146
    Симпатии:
    17
    Пользуйся.
     

    Вложения:

    • Simpledb.txt
      Размер файла:
      21,6 КБ
      Просмотров:
      2
  10. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    О, спасибо большое.
    Напилил тем временем что-то похожее, но более "велосипедно" конечно. Принцип в общем тот-же.
    Щаз подумаем, что адекватнее доделывать.
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    хех, я думал чуваку нужно множество разношерстных объектов преобразовать в БД, что бы оно само создало структуру, связи и прочее. А чувак ищет обертку над mysqli. хех
     
  12. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Да можно было-бы и связи сделать, но не требуется, объекты слишком разнородные и "плоские".
    Create table у меня делает, в 95% случаев можно по данным понять какие типы полей нужны.
     
  13. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Данные постоянно разные? А может лучше монга?
     
  14. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    20-50 вариантов. Может больше. Разнородные но группами. (тысячи-десятки тысяч -реже сотни в группе).
    Много данных.
    Пока попробовал просто в mysql загнать, вполне дышит. Потестирую еще.
    SQL удобен всё-таки возможностью постфактум ключей наделать и некоторые выборки делать по данным всех не перебирая.
    Но это все "исследовательский" проект, так что пока непонятно насколько реально будет именно синтаксисом sql обойтись.
     
  15. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Собственно, чем json-объекты не устраивают и MongoDB ?
     
  16. XNP

    XNP Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    Не пользовался никогда noSQL, но вы правы, наверное имеет смысл как-раз на этом примере и попробовать.
    А то всё руки не доходят.
    Буду рефакторить переделаю на монго.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не обязательно
    мускул и постгрес умеют тоже с json работать, почитай
    --- Добавлено ---
    если конечно это json, т.к. ты до сих пор хз зачем, но хранишь тайну алгоритма сериализации.
     
  18. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Вот с тем брать мускул и постгрю или брать nosql, тут тебе нужно, как указал Игорь, не торопиться и внимательно подумать (протестировать) все операции с данными которые предполагается делать. Где-то в выигрыше окажется nosql, где то вполне может хватить реляционной субд. При правильной реализации через orm обычно рефакторить ничего не нужно, только на уровне коннектора к базе