Я могу использовать APC И memcached на том же сервере?

Я использую кэш-память для объектов cacheing, но хотел бы добавить, кроме того, акселератор кода операции как APC. Так как они оба включают cacheing, я не уверен, будут ли они "ступать на каждого пальцы ног других", т.е. Я не уверен, является ли кэш-память уже акселератором Кода операции.

Кто-то может разъясниться? Я хотел бы использовать их обоих - укусил для разных вещей. кэш-память для cacheing мои объекты и APC для ускорения кода

7
задан Stick it to THE MAN 20 December 2009 в 08:27
поделиться

2 ответа

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

Если расчет 100 КБ * 100 КБ * 8 меньше, чем объем физической памяти на вашем компьютере для использования JVM, простой неразреженный массив является жизнеспособным решением.

Если массив разреженный, с (скажем) 75% или более элементов равно нулю, то вы можете сэкономить место, используя библиотеку разреженных массивов. Были предложены различные альтернативы, но во всех случаях вам все равно нужно работать, если это даст вам достаточную экономию. Выясните, сколько там будет ненулевых элементов, умножьте это на 8 (чтобы получить удвоение) и (скажем) на 4, чтобы учесть накладные расходы на разреженный массив. Если это меньше, чем объем физической памяти, который вы можете сделать доступным для JVM, тогда разреженные массивы являются жизнеспособным решением.

Если разреженные и не разреженные массивы (в памяти) не будут работать, все станет больше сложно, и жизнеспособность любого решения будет зависеть от шаблонов доступа к данным массива.

  • Один из подходов состоит в том, чтобы представить массив в виде файла, отображаемого в память в форме MappedByteBuffer. Предполагая, что у вас недостаточно физической памяти для хранения всего файла в памяти, вы сильно ударите по системе виртуальной памяти. Так что лучше всего, если вашему алгоритму нужно будет работать только с смежными секциями массива в любое время. В противном случае вы, вероятно, умрете от обмена.

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

  • Третий подход заключается в представлении массива с использованием упрощенной базы данных, такой как BDB. Это будет медленнее, чем любое решение в памяти, потому что чтение элементов массива преобразуется в доступ к диску. Но если вы ошибетесь, это не убьет систему, как подход с отображением памяти. (И если вы сделаете это в Linux / Unix, системный кэш блоков диска может ускорить процесс, в зависимости от шаблонов доступа к массиву вашего алгоритма)

  • Четвертый подход - использовать кэш распределенной памяти. Это заменяет дисковый ввод-вывод сетевым вводом-выводом, и трудно сказать, хорошо это или плохо.

  • Пятый подход - проанализировать ваш алгоритм и посмотреть, можно ли его реализовать в виде распределенного алгоритма. ; например

4
ответ дан 6 December 2019 в 07:50
поделиться

Memcache больше похож на кеш распределенных объектов, чем на что-то вроде APC или XCache, которые хранят байт-код PHP в памяти, поэтому вам не нужно каждый раз анализировать его. Их основные цели различны.

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

APC и XCache имеют схожие функции кэширования объектов, но вы ограничены хост-машиной. Что, если бы вы хотели, чтобы все 10 разных серверов имели доступ к одному объекту без необходимости повторного запроса для каждого сервера? Вы бы просто направили их на свой сервер кэша памяти и вперед. Вы по-прежнему получаете преимущество, если у вас есть только один сервер, потому что использование кэша памяти поможет вам масштабироваться в будущем, если вам нужно будет перейти к большему количеству блоков.

Главное, что нужно учитывать, - это если вы думаете, что вашему приложению понадобится масштабировать. Memcache имеет больше накладных расходов, поскольку для доступа к нему вам нужно использовать TCP-соединение, а не просто вызов функции для общих объектов APC / Xcache.

Однако Memcache имеет следующие преимущества:

  • Быстрее, чем диск или повторный запрос.
  • Масштабируется для нескольких серверов.
  • Работает со многими разными языками, ваши объекты не привязаны к PHP + APC Только / Xcache.
  • Все процессы / языки имеют доступ к одним и тем же объектам, поэтому вам не нужно беспокоиться о том, имеют ли ваши дочерние процессы PHP пустой кеш объектов или нет. Однако это может не иметь большого значения, если вы используете PHP-FPM.

В большинстве случаев Я бы порекомендовал кэшировать ваши объекты в memcache, так как это не намного сложнее и более гибкое для будущего.

Имейте в виду, что это только относительно кеширования объектов. Memcache НЕ имеет никаких функций ускорения байт-кода или PHP, поэтому я бы запустил его параллельно с APC или Xcache

19
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

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