![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
stalker2000 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.7.2010 Репутация: нет Всего: нет |
Добрый день. Некий скрипт в цикле делает некие действия и по результату формирует массив для одиночного результата. Далее, этот массив записывается в базу в json формате. В новой итерации цикла формируется новый массив, который должен быть добавлен к тому, что уже хранится в базе. В коде это выглядит так:
Финальный массив может быть очень большим, соотв. может возникнуть ситуация с нехваткой памяти. Можно ли обойтись без извлечения json-данных целиком из базы, декодирования их в массив и записывания назад? Можно ли как-то просто дописывать новые данные к существующим? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Как часто и зачем будут использоваться эти данные?
К примеру, можно не склеивать данные сразу, а отложить это на потом. json - это всегда одна строка. Можно просто приписывать следующий результат, через символ "\n" с помощью CONCAT. Тогда склеивать массивы придется только при использовании данных. Получить значение, порезать его на строки, раскодировать каждую, склеить массивы... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Envy |
|
|||
Unregistered |
Я бы вообще отказался от варинта "писать json в БД". Сущности, из которых состоит массив, нельзя сохранить в отдельной таблице? Это решит вопрос, имхо.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: нет Всего: 28 |
Таблица и так массив. Добавляйте/удаляйте записи как обычно. А если получить json, выбирайте из БД массивом нужные строки по какому-то критерию и кодируйте в json.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
stalker2000 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.7.2010 Репутация: нет Всего: нет |
Не часто, но всегда все целиком. Т.е. сначала этот массив формируется, а потом используется без модификаций.
Как написал выше, они всегда используются все сразу. Как мне кажется, сохранение в json в таком случае самый оптимальный вариант - извлёк одну запись, декодировал и работаешь. Но тут основной вопрос как быстро сформировать этот массив. Подумал, можно попробовать использовать временную таблицу типа MEMORY, писать туда по одному параметру, а по окончании собрать и записать результат в постоянную таблицу. В таблицах типа MEMORY, кажется, есть ограничение на размер? 16 мб, если не ошибаюсь? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Если не часто - то можно и моим способом, склеивая промежуточные json'чики.
При первом использовании, explode по символу перевода строки, собираем результирующий массив, потом сохраняем его в том же месте в таблице, чтобы не переклеивать его в следующий раз. Можно каждый промежуточный json сохранять в новой строчке, с ID и датой вставки. Дата - чтобы при сборке данные не мешались. При первом использовании запись также можно склеить и сохранить одной строкой, вместо пучка. Memory, вроде как, не поддерживает тип поля TEXT, так что хранить логи в памяти может и не получится. Это сообщение отредактировал(а) ksnk - 9.12.2015, 17:57 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
stalker2000 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.7.2010 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |