Как получить Google как скорости с php?

Помимо того, что у вас есть недопустимый код (symbolList.IndexOf(i), вероятно, должно быть symbolList[i]), проблема, с которой вы сталкиваетесь, заключается в том, что вы не захватываете переменную цикла, прежде чем вызывать лямбду.

Вот простое исправление:

List<string> symbolList = new List<string>() { "AAPL", "QQQ", "FB", "MSFT", "IBM" };
Task[] taskArray = new Task[symbolList.Count];
for (int i = 0; i < taskArray.Length; i++)
{
    string symbol = symbolList[i];
    taskArray[i] = Task.Factory.StartNew(() =>
    {
        criteriaEvalution.Evaluate(finalArray, false, new List<parseObj>(), ref builder, symbol);
    });
}
Task.WaitAll(taskArray);

Обратите внимание на строку string symbol = symbolList[i];, прежде чем начать задание.

Если вы этого не сделаете, цикл завершится до запуска задач, а затем i будет равен taskArray.Length, и, следовательно, вы получите ошибку «Индекс был вне диапазона».

Другое, что я хотел бы предложить, это то, что вы должны использовать Microsoft Reactive Framework (он же Rx) - NuGet System.Reactive и добавить using System.Reactive.Linq; - тогда вы можете сделать это:

List<string> symbolList = new List<string>() { "AAPL", "QQQ", "FB", "MSFT", "IBM" };

var query =
    from symbol in symbolList.ToObservable()
    from e in Observable.Start(() =>
        criteriaEvalution.Evaluate(finalArray, false, new List<parseObj>(), ref builder, symbol))
    select e;

query.ToArray().Wait();

Гораздо проще и чище, чем задачи. Затем вы можете использовать операторы LINQ для результатов.

5
задан Thomaschaaf 20 February 2009 в 22:01
поделиться

10 ответов

Существует много методов, которые использование Google для достижения суммы пропускной способности это обеспечивает. MapReduce, Google File System, BigTable являются несколькими из тех.

Существует несколько очень хороших Свободных и альтернатив С открытым исходным кодом им, а именно, Apache Hadoop, Apache HBase и Гипертаблица. Yahoo! использует и продвигает проекты Hadoop довольно много, и таким образом они вполне активно сохраняются.

8
ответ дан 18 December 2019 в 05:56
поделиться

Я использую PHP с одними только подключениями Платформы и Базы данных Зенда, кажется, занимают больше времени, чем Google этих 0,02 секунд берет, чтобы сделать запрос.

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

Производительность является об архитектуре не языком.

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

Это действительно зависит от того, что Вы пытаетесь сделать, но здесь являетесь некоторыми примерами:

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

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

  • Посмотрите на свое время загрузки фронтенда. Используйте дополнение Yahoo YSlow для Firebug. Предельные запросы HTTP, заголовки далекого будущего набора для кэширования js, CSS и изображений. И т.д.

Можно получить скорости молнии на веб-приложении, вероятно, не с такой скоростью, как Google при оптимизации каждого слоя приложения. Ваши времена соединения дб являются, вероятно, не самой медленной частью Вашего приложения.

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

Некоторое время назад Google решил поместить все в RAM.

http://googlesystem.blogspot.com/2009/02/machines-search-results-google-query.html

Если Вы никогда не должны запрашивать жесткий диск, Ваши результаты значительно улучшатся. Кэширование помогает, потому что Вы не запрашиваете жесткий диск так же, но Вы все еще делаете, когда существует неудачное обращение в кэш (Если Вы не означаете кэшироваться с PHP, что означает, что Вы только компилируете программу PHP, когда источник был изменен).

5
ответ дан 18 December 2019 в 05:56
поделиться

Memcached является рекомендуемым решением для оптимизации устройства хранения данных/извлечения в памяти на Linux.

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

Сценарии PHP по умолчанию интерпретируются каждый раз, когда их называет http сервер, таким образом, каждый вызов инициирует парсинг сценария и вероятно компиляцию Механизмом Зенда. Можно избавиться от этого узкого места при помощи кэширования сценария, как APC. Это сохраняет когда-то скомпилированный Сценарий PHP в диске памяти/на и использует его для всех последующих запросов. Усиления являются часто значительными, особенно в приложениях PHP, созданных со сложными платформами как ZF.

Каждый запрос по умолчанию открывает соединение с базой данных, таким образом, необходимо использовать некоторое объединение соединения с базой данных или постоянные соединения (которые не всегда работают, в зависимости от http server/php конфигурация). Я никогда не пробовал, но возможно существует способ использовать кэш-память для хранения дескрипторов соединения с базой данных.

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

Фактическая "проблема" состоит в том, что работы PHP, немного отличающиеся, чем другие платформы, потому что это работает в SSI (серверная сторона включает) путь - каждый запрос обработан http сервером и если это требует выполнения Сценария PHP, его интерпретатор инициализируется и загруженные сценарии, проанализированные, скомпилированные и выполненные. Это может сравниться с тем, чтобы садиться в автомобиль, запущением двигателя и движением для 10 метров.

Другим путем является, скажем, сервер приложений путь, которым само веб-приложение обрабатывает запросы в своем собственном цикле, всегда совместно используя соединения с базой данных и не инициализируя время выполнения много раз. Это решение дает намного более низкую задержку. Это, с другой стороны, может сравниться с уже тем, чтобы быть в рабочем автомобиле и использовании его для управления теми же 10 метрами.;)

Вышеупомянутое кэширование/предварительная компиляция и объединение решений являются лучшими в сокращении init наверху. PHP/MySQL является все еще основанным на RDBMS решением хотя, и существует серьезное основание, почему BigTable является, ну, в общем, просто большим, черепком, в широком масштабе распределенная хеш-таблица (немного упрощения, я знаю) - чтение на Высокой Масштабируемости.

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

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

Чтобы к ускорению ищут на полном тексте на большом наборе, можно использовать Сфинкса. Это может быть настроено или на 1 или нескольких серверах. Однако необходимо будет адаптировать существующий код запросов, когда Сфинкс работает как поисковый демон (освобождает, доступны для большинства языков),

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

Google имеет крупную, очень распределенную систему, которая включает большую собственную технологию (включая их собственные аппаратные средства, и работу, файл и системы баз данных).

Вопрос похож на выяснение: "Как я могу заставить свой автомобиль быть грузовиком?" и чрезвычайно бессмысленный.

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

Согласно ссылке, предоставленной @Coltin, время отклика Google находится в регионе.2 секунд, не.02 секунд. Пока Ваше приложение имеет эффективный дизайн, я полагаю, что необходимо смочь достигнуть этого на большом количестве платформ. Хотя я не знаю PHP, он был бы surpise меня, если.2 секунд являются проблемой.

0
ответ дан 18 December 2019 в 05:56
поделиться
  • Кэширование кода APC;
  • Zend_Cache с APC или бэкендом Кэш-памяти;
  • CDN для статических файлов;
0
ответ дан 18 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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