Как стать автором
Обновить
71
0
Андрей Фролов @Randll

Пользователь

Отправить сообщение
Основное предназначение shared_buffers — кэш блоков таблиц и индексов. Чем бОльшая часть данных там лежит, тем лучше для операций чтения.

разработчики указывают, что сам PostgreSQL может не справляется эффективно с обработкой большого (более 8Гб) shared_buffers.


Про 32 бита всё понятно, а вот на на 64 битной архитектуру про 8GB заявлять без понимания суть вопроса это как-то странно.

rhaas.blogspot.ru/2012/03/tuning-sharedbuffers-and-walbuffers.html
For shared_buffers, the quick answer is to allocate about 25% of system memory to shared_buffers, as recommended by the official documentation and by the wiki article on Tuning Your PostgreSQL server, but not more than about 8GB on Linux or 512MB on Windows, and sometimes less. However, I've recently become aware of a number of cases which suggest that higher values may perform much better. PostgreSQL uses the operating system's memory for caching, but, as recent performance results have shown, there can be a huge performance benefit to having the entire database in shared_buffers as opposed to merely having it in RAM. Several EnterpriseDB customers or potential customers have reported excellent results from cranking up shared_buffers to very large values, even giving PostgreSQL the lion's share of system memory for its own use. This flies in the face of some conventional wisdom that PostgreSQL doesn't handle large shared_buffers settings well, but enough people have reported good results that it seems worth taking this strategy seriously.
да мы пока не перемещаем. но если надо будет, скриптик напишем.)
Пока не сталкивались, вакуум в бэкграунде успевал всё вычистить.

Если не будет успевать, можно сделать его более злым, можно раскладывать наши базы на большее количество инстансов постгреса, чтобы счётчики транзакций набивались медленнее.
Решардинг в смысле перемещения пользователей между шардами — такого не делаем.
Решардинг в смысле перемещения шардов на другие машины — во время профилактики.
Это уже дело админов. У них есть средства мониторинга всякие.
1. Да
2. Никакого, не очень даже понимаю зачем они нам были бы нужны :)
3. У нас свой протокол и rpc. Бинарный поверх tcp/ip.
4. Не специалист в j2ee, не подскажу.
Да не, я не против петиций. Сам даже как-то подписывал петицию чтобы отменили «аццкий донат» в Аллодах :) Был неправ, кстати.

Я скорее про то, что голосовать рублём это самый надёжный способ достучаться до капиталистических акул.
Нельзя, и что? Других игр полно. Что вам мешает играть в ВОВ? То что вы хотите поиграть именно в эту игру? Но ведь Mail.ru не просто так выкупает и творит что хочет. Вся локализация и оперирования всегда происходят в сотрудничестве с разработчиком игры.
Поэтому, то что делает с игрой мэил в России это то, что хочет разработчик, это и есть игра. Мэил не ломает игру донатом, монетизация в игре всегда такая, которая устраивает разработчка.
Есть такое радио: «Эхо Москвы». Если кто-то наезжает на Эхо, советует Венедиктову что крутить по радио, а что нет, он всегда отвечает одно и то же. «Переключайся на Авто Радио». Ну если вам что-то не нравится — просто переключитесь. Зачем петиции писать? Вас же никто не заставляет играть в АА, есть сотни других игр?
Для обычных серверов у нас есть метрика, называемая «нагрузка», которая включает в себя всё. :)

С базой чуть сложнее.
Мы смотрим
— сколько всего датабазных транзакций у нас прошло единицу времени.
— разбивка по типам. т.е. 100 операций взять предмет, 12 операций завершить квест и т.п.
— логируем, но не очень смотрим, мин/макс/среднее время отклика по одному типу транзакции за каждые 3 секунды. Это инфа для дебага а не для ежедневного просмотра.
— загрузку сервера исполнения транзакций в % от максимальной. Т.е. процент времени, который сервис тратит на обработку запросов.
— раз в несколько месяцев запускаем нагрузочный тест с логированием sql-я и потом, через pgfouine, находим и вычищаем топ тормозящих запросов.

Если кто-то подправил запрос и он стал тяжёлым, то мы увидим что нагрузка на датабазный сервис поднялась. Если кто-то сделал слишком частый запрос — мы увидим ненормальное количество операций определённого типа. Если кто-то написал медленный запрос, который выполняется редко, мы отловим это по профайлингу SQL-я.
Не обязательно весь объект наследовать от UserType. Можно сделать филд и пометить его аннотацией Type со ссылкой на соответствующий тип.

Примерно так
class DataSet {
 
 @Column(...) 
  int x;

 @Column(...)
 @Type(value="pkg.to.type.JsonType")
  Descriptor z;
}


Если мы один филд хотим разложить в 2 поля: json + поле для индексирования, можно использовать композитный тип.

class DataSet {
 
 @Column(...) 
  int x;

 @Column(...)
 @Type(value="pkg.to.type.CompositeType")
  @AttributeOverrides (
      @AttributeOverride( name="field_1", column=@Column(name="f1")
     @AttributeOverride( name="field_2", column=@Column(name="f2")
    ) 
  Descriptor z;
}



p.s. код писал без IDE, наверняка не скомпилится.
Я с ними никак не связан и ответить не могу.
Мин-макс. Выше в статье написано, там где про первый байт лонга.
При создании базы сиквенсы сдвигаются так, чтобы генерить идентификаторы в нужном диапазоне.
Virtual shards это когда много шардов мапятся на малое количество физических машин.
Тут подробнее
dustin.sallings.org/2010/06/29/memcached-vbuckets.html
Про In-Memory Data Grids. Мы не пробовали, для нас это оверкил пожалуй. Для надёжности нужно много серваков и в разных датацентрах. При большом желании мы сами бы смогли это сконфигурить, но игру потом всё равно придётся отдать зарубежным партнёрам, и они будут её разворачивать сами и на своём железе. Любая сложная схема будет уязвима для человеческого фактора. Самое ближайшее, на что я поглядывал, это MemSQL, но… хочется обойтись бесплатным софтом.

Впринципе, если PostgreSQL нам не хватит, я бы начал смотреть в сторону Тарантула. Во первых он наш, а во вторых его однотредовая архитектура нам ближе :)

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

БП и прочие подпорки это всё сложно и ненадёжно. Всегда найдётся тот, кто забудет что-то подключить/закупить и поднастроить. Я бы не рисковал без крайней нужды.
10 часов это очень мало. Можно не успеть, если учесть что ночь, админы спят, сервера стоят в датацентре, и надо туда доехать, надо вспомнить какой где сервер, вспомнить что данные надо куда-то там перелить, найти пустой диск, вставить его в новую тачку, перекопировать всё и т.д.
Во первых — а зачем? SSD достаточно быстр для нас.

Во вторых — Что-то как-то стрёмно :)

Итак, время жизни данных в i-RAM (при полностью заряженном аккумуляторе) для одного установленного модуля памяти исчисляется 24-32 часами, для двух модулей — 18-29 часов, а для 4 модулей — 12,6-24 часа в зависимости от типа модуля. То есть, более или менее уверенным в сохранности данных в i-RAM можно быть только в течение примерно 10-12 часов, если абстрагироваться от типа используемых модулей.

Информация

В рейтинге
Не участвует
Откуда
Amsterdam, Noord-Holland, Нидерланды
Работает в
Дата рождения
Зарегистрирован
Активность