@S-a-n-d-r-0

Как в php организовать хранения временной таблицы данных на время работы скрипта?

Пишу обмен для сайта с внешним сервисом. Пишу на стороне сайта, к сервису только запросы по его API. У каждой сущности, которая обменивается, есть:
1) id на сайте (mysite_id)
2) external id на сайте (mysite_ext_id)
3) external id на внешнем сервисе (service_ext_id)
4) id на внешнем сервисе. (service_id)
Во время выполнения скрипта мне нужно оперативно записывать соответствия одних значений другим, чтобы потом использовать.
По структуре данных это похоже на таблицу, столбцы которой (4 этих id) постепенно заполняются в ходе выполнения. И для каждой её строки мне нужно уметь получить по значению service_ext_id соответствующий ему mysite_id, по service_ext_id соответствующий service_id и т.д.

Я не знаю, как лучше организовать хранение такой информации. Сейчас все это записывается в кучу ассоциативных массивов типа [service_ext_id1 => mysite_id1, service_ext_id2 => mysite_id2, ...]. И есть куча методов для доступа к этой инфе типа getServiceIdByMysiteId, getServiceIdByServiceExtId, getMysiteIdByServiceExtId и т.д.

В отдельной таблице в базе вроде нет необходимости, т.к. информация существует и используется только пока исполняется скрипт, потом уже станет неактуальна. Да и запросов к этой таблице во время выполнения было бы очень много.

Хочется структурировать и нормально организовать хранение в оперативной памяти и доступ r информации, которая имеет формат таблицы. А потом еще и передать всю полученную информацию другим методам. Как будет логичнее всего это сделать?
  • Вопрос задан
  • 432 просмотра
Решения вопроса 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Хочется структурировать и нормально организовать хранение в оперативной памяти

Ну, собственно, здесь и содержится ответ на вопрос.
Всякие key-value значения нам не подойдут, а вот прямоугольная таблица - очень даже.
Учитывая что реляционные БД позволяют сохдавать таблицы в памяти, проблема решена. Mysql здесь будет чересчур, а sqlite вполне подойдет
$db = new PDO('sqlite::memory:');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db->query("CREATE TABLE temp (mysite_id int,mysite_ext_id int,service_ext_id int,service_id int)");

ну и дальше обычными запросами
$db->query("INSERT into temp (mysite_id) values (1)");
var_dump($db->query("SELECT service_ext_id FROM temp where mysite_id=1")->fetchColumn());
Ответ написан
Комментировать
Tomio
@Tomio
backend developer (python, php)
Ну вы можете использовать SQLite для ваших целей. У вас будет полноценная база и нужные таблицы, в которых можно проиндексировать необходимые колонки при необходимости.
А в конце всех операций просто удалите файл с базой и всё)
Ответ написан
@RuComMarket
Битрикс FullStack разработчик
если надо чтобы отрабатывалось во время обработки скрипта, то в базе нет никакой необходимости, она только увеличит нагрузку и соответственно время обработки.
в данном случае лучше всего хранить в массиве или в объекте.
если элементы связаны, то не трудно написать скрипт, например, для объединения в многомерный массив.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы