Лучшие практики, PHP, отслеживая миллионы впечатлений в день

Несколько человек упомянули cpan утилиту, но она больше, чем только запускает оболочку. Просто дайте ему модули, которые Вы хотите установить, и позволять ему сделать это - работа.

$prompt> cpan Foo::Bar

, Если Вы не даете ему аргументов, это запускает оболочку CPAN.pm. Это работает над Unix, Mac, и должно быть очень хорошо в Windows (особенно Земляничный Perl).

существует несколько других вещей, которые можно сделать с cpan инструментом также. Вот сводка текущих функций (который мог бы быть более новым, чем тот, который идет с CPAN.pm и жемчугом):

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.
7
задан cletus 8 December 2009 в 04:31
поделиться

8 ответов

Как это делают большие собаки?

Несколько серверов. Балансировка нагрузки.

Как это делают собачки?

Несколько серверов. Балансировка нагрузки.

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

5
ответ дан 6 December 2019 в 14:04
поделиться

Пара способов:

Во-первых, вы достигнете точки, когда вам нужно разделить или сегментировать данные, чтобы разделить их между несколькими серверами. Это может быть так же просто, как AC на server1, DF на server2 и т. Д.

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

Попросите другой процесс собрать эти состояния и записать агрегированные данные в базу данных. Периодически объединяйте эти записи в сводные данные.

Попросите другой процесс собрать эти состояния и записать агрегированные данные в базу данных. Периодически объединяйте эти записи в сводные данные.

5
ответ дан 6 December 2019 в 14:04
поделиться

Впечатляет. Большая часть моих данных была получена сразу из массивных вставок. Я обнаружил, что объемные вставки намного лучше, чем индивидуальные. Кроме того, дизайн ваших таблиц, индексов и т.д. во многом зависит от скорости вставки. Проблема с использованием cron и массовой вставкой - крайние случаи. (Когда идет делать вставки).

Дополнительно с плоскими файлами. Вы можете легко столкнуться с проблемами параллелизма при записи вставок в файл. Если вы пишете более 1000 вставок, вы быстро столкнетесь с множеством конфликтов и потерь, когда возникнут проблемы с записью файла.

2
ответ дан 6 December 2019 в 14:04
поделиться

Это не та проблема, которую вы можете решить только в PHP.

Если у вас 20 000 запросов в секунду, ваш "малобюджетный" (как я понял по подтексту вашего вопроса) , то он достигнет своего предела, прежде чем большинство из них достигнут процессора PHP (и, в конечном итоге, MySQL).

Если у вас есть сценарий отслеживания трафика, вы, скорее всего, вызовете проблемы для все сайты, которые вы отслеживаете.

1
ответ дан 6 December 2019 в 14:04
поделиться

ИМХО, PHP не подходит для большого объема веб-трафика. Однако база данных, скорее всего, утомит вас раньше, чем производительность PHP, особенно с моделью подключения PHP (открывает новое соединение для каждого запроса).

У меня есть два предложения для вас:

  1. Посмотрите SQL Relay: http://sqlrelay.sourceforge.net/
  2. Ознакомьтесь с некоторыми ускорителями PHP: http://en.wikipedia.org/wiki/List_of_PHP_accelerators

SQL Relay эффективно позволяет PHP использовать преимущества пула соединений и это даст гораздо лучшую производительность для приложения базы данных большого объема.

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

Удачи!

1
ответ дан 6 December 2019 в 14:04
поделиться

Запись в файл - это прекрасно, но вам все равно нужно синхронизировать запись в файл, что вернет вас к исходной точке.

Предложения:

  • Система MQ, хотя иногда БД может Быстрее,
  • Идея MQ: очередь в памяти. Я знаю, что вы сказали PHP, но я видел, что это довольно хорошо работает в Java / Servlets,
  • В зависимости от того, что вы отслеживаете, вы можете развернуть статический файл в CDN (облачная вещь, о которой вы говорили) и объединить журналы доступа в пакетном режиме. Позволяет арендовать горизонтальное масштабирование,
  • INSERT DELAYED - хорошая идея, но я не знаю, какой размер очереди / невыполненной работы для этого в MySQL? (любой)
0
ответ дан 6 December 2019 в 14:04
поделиться

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

0
ответ дан 6 December 2019 в 14:04
поделиться

Я бы также порекомендовал использовать кэширование памяти.

Запишите свои данные в кэш памяти и пусть периодически выполняющееся задание агрегирует их и выполняет вставки.

Запись в реальный файл, вероятно, будет УМЕНЬШИТЕ производительность, поскольку доступ к файловой системе в основном медленнее, чем обращение к базе данных, которая может обрабатывать доступ на запись намного эффективнее.

1
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

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