Объект кэша в PHP без использования сериализирует

Можно найти некоторые хорошие примеры в Питание Операторов выбора SQL , и я думаю оператор, который можно использовать, будет что-то вроде этого (от 4guysfromrolla ):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

10
задан jW. 27 July 2009 в 23:33
поделиться

7 ответов

Насколько мне известно, невозможно кэшировать объекты в PHP без сериализации. В целом, однако, механизмы кэширования (APC, Memcache и т. Д.) Действительно пытаются удалить соединение (я) с базой данных больше, чем улучшить производительность (и тем самым снизить общую нагрузку на БД). Это определенно то, как memcache и другие используются в отношении Drupal. Другими словами, механизмы кэширования должны позволять масштабирование, хотя они могут не особенно улучшать производительность.
Внедрение механизма кэширования должно позволить вам более легко масштабироваться, даже если производительность для каждой машины не лучше, чем раньше для одного соединения. При достижении определенного порога производительность БД резко ухудшится, и механизмы кэширования должны помочь решить эту проблему.

9
ответ дан 3 December 2019 в 18:00
поделиться

Look into the Igbinary PHP extension. It is a drop in replacement for serialize and unserialize and it may suit your needs.

It stores objects in a binary format instead of a string which decreases memory usage and also decreases the time to serialize and unserialize objects.

Although this does go through the process of unserializing an object, the binary format may increase performance enough to make this process reasonable for use in your application.

6
ответ дан 3 December 2019 в 18:00
поделиться

Maybe the solution is to not build a single, massive, expensive object.

Given that a PHP application pretty much starts from a clean slate on every page load, a solution that depends on a single, giant object is a poor fit to the language. Since you don't go into much detail about what your object is & what it does, I can't be certain, but I'd suspect you don't really need everything the object does on every page load. If that's the case, you might seriously consider splitting it into a number of smaller, simpler classes that you can instantiate as needed.

3
ответ дан 3 December 2019 в 18:00
поделиться

igBinary - полезное расширение, которое может помочь вам ускорить процесс сериализации / десериализации. Он заменяет стандартный механизм сериализации более умным, двоичным. Если вы управляете собственным сервером и можете установить его, стоит попробовать.

2
ответ дан 3 December 2019 в 18:00
поделиться

НЕТ, невозможно сохранить объект PHP в несериализованной форме; по крайней мере, не со следующими решениями для кеширования (я пробовал эти; не знаю о других, которые могут существовать) :

  • файлы
  • memcached
  • APC
  • База данных (да, вы можете подумать о кэшировании вещей в DB ^^, например, Drupal делает это по умолчанию)

Если десериализация вашего объекта занимает столько времени, возможно, он действительно большой ? Можно ли как-нибудь уменьшить его размер?

Например, может быть, у вас есть большой набор HTML-кода в этом объекте? Если да, можно ли его сохранить в другой записи кэша?
(сериализация - это «преобразование некоторых данных в строку; поэтому, если вы уже работаете со строкой, вам не нужно повторно сериализовать ее, чтобы сохранить в кеше)

Или, может быть, это не так на его создание с нуля уйдет много времени? В таком случае действительно ли необходимо кеширование?

1
ответ дан 3 December 2019 в 18:00
поделиться

в этом случае лучшим вариантом было бы написать свой собственный сервер.

это легко сделать на php - и у вас уже есть код - но php может быть не лучшим выбором для большинства, когда дело доходит до написания серверов.

  • он может стать новым узким местом вашего приложения (поскольку php не действительно готов к многопоточности, и запросы обрабатываются последовательно)
  • не все хостеры разрешают настраиваемые скрипты cli
  • , если ваше дерево решений изменяется, вы должны уведомить свой сервер, чтобы восстановить дерево
0
ответ дан 3 December 2019 в 18:00
поделиться

если возможно на вашей платформе, напишите простой демон, который загружает ваше дерево при запуске, а затем отвечает на запросы через розетку. Ваш серверный процесс может разветвлять запросы и отвечать на них без воссоздания дерева. Написание демона нетривиально, но очень хорошо задокументировано (по крайней мере, для C). У вас не должно возникнуть проблем с переводом этого на PHP с помощью расширений pcntl и posix.

1
ответ дан 3 December 2019 в 18:00
поделиться
Другие вопросы по тегам:

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