2013-11-22 3 views
-2

Во-первых, я создаю приложение на Android и используя PHP в качестве своих веб-сервисов и связи с базой данных, я использую базу данных MySQL.Обновление базы данных каждые X секунд

Хорошо, вот вопрос: Я создаю приложение в реальном времени в реальном времени, и мне нужно обновить строку в моей базе данных каждые 5 секунд, различная строка для каждого пользователя в одной таблице. способ оптимизации затрат? Я имею в виду, он работает отлично для 10 пользователей .. но я предполагаю, что когда я получу 50-100, произойдет сбой БД. И еще одна важная проблема - пропускная способность, я действительно хочу использовать как можно меньше.

Любые советы? Если я положу все запросы в очередь, чтобы обновить определенную строку, не помешает ли ей сбой? Я имею в виду, что в то же время будет еще 50 подключений к БД.

+0

Это означает, что вы загружаете свой сервер. Если вы находитесь на хостинговой службе, вы рискуете быть рассказанным. –

ответ

1

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

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

  • Храните ваш протокол светлым. Проверьте JSON - это хорошо читаемый и компактный. Или вы можете реализовать двоичную нагрузку.
  • Возможно, вы захотите попробовать некоторое управление потоком в смеси:
    • Эквивалентность на стороне клиента: какова моя текущая латентность записи? В течение X миллисекунд обновляйте каждые 5 секунд. За X, 10 секунд. Более 5x X, 30 секунд.
    • Качество обслуживания на стороне сервера (QoS): загрузка процессора на X%? Нажмите на сообщение для клиентов, сказать им, чтобы обновлять каждые 10 секунд вместо 5.

О базе данных - это может быть сложно, но нет ничего невозможного. Некоторые мысли:

  • Кэш доступа к данным; если вы запрашиваете запись N, и для нее не было обновлений, нет необходимости снова удалять базу данных - просто прочитайте из кеша памяти.
  • Использование объектов в памяти для чтения/записи, фиксации базы данных, когда загрузка процессора низкая, достигается ограничение по времени или N операций, в которых выполняется обработка.
+0

+1 Бинарная нагрузка также очень приятная опция против сжатия данных .. –

2

Возможно, вы захотите использовать LZ4 (быстрое сжатие данных) для ограничения полосы пропускания.

Там также должна быть реализация на Java и, возможно, даже один написан на PHP

Для сервера MySQL вы должны иметь оперативную память (24-64Gb дикое предположение) и двигатель InnoDB (так InnoDB буферный пул может кэшировать данные/индекс)

Если у вас есть MySQL 5.6 вы должны включить с InnoDB кэша памяти, так что вы можете запросить без накладных расходов выключены «комплекс» SQL разбора ..

Oracle утверждает, что запросы могут быть обработан в 7-9 раза быстрее с этим Интерфейс «NoSQL»

Для высокой записи вы должны иметь массив RAID 10 с дисками 10K/15K или SSD-дисками для обработки нагрузки на запись, но это также зависит от структуры таблицы.

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

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

Смежные вопросы