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

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

Отправить сообщение
Спасибо, я о нём тупо не знал до этого момента. :)

Посмотрел, вроде примерно то что надо. Впринципе можно было бы и его заиспользовать. Разница с JSON-ом на самом деле минимальна. JSON начиная с версии 9.3 такой же встроеный тип как и hstore, с поддержкой на уровне базы.

Но с кастомными типами есть один неприятный момент. Их сложно сращивать одновременно с hibernate-ом и постгресным jdbc драйвером. Когда я это пробовал, мне пришлось немного подхачить драйвер, чтобы в коде у меня всё это выглядело красиво, что уже не есть гуд.
Чёрт его знает, сколько они в среднем живут. Статистики я не видел. По личным печатлениям — у нас в офисе ломаются и те и те. Вообще SSD очень молодая технология и каждый следующий диск надёжнее чем предыдущий. Именно поэтому мы откладываем покупку дисков до самого последнего момента :)
На Аллодах был специальный механизм для этого, но в Skyforge мы от этого отказались. Много багов, мало толку. Разные карты у нас не граничат, хождение между ними только через телепорты.
Ну умер диск и умер. Эка невидаль. Бывает. Для этого и делается резервная реплика и бэкапы.
Именно так. На каком сервере какая карта будет, решает специальный умный балансировщик.
Согласен, но при тюнинге fsync-а WAL лично я постоянно упирался в latency а не throughput. На SSD latency существенно меньше.
Никак. Игроки размазаны по картам. Карты находятся на разных машинах. Одна машина должна тянуть ровно столько людей, сколько будет на одной карте. И этим числом мы управляем :)
Так что таких батлов как еве у нас быть не может.
До рестарта данные в одной базе уже правильные, а во второй они заблокированы. В общем да, в некотором смысле не консистенты. Но это не беда, мы сервера всё равно скорее всего остановим, если у нас всё упало :)
Если мы жахаем файерболом то мы находимся на одном сервере гейм механики. Все взаимодействия у нас локальные.

Более подробно я пока не расскажу, это потянет на полноценную статью :) Возможно она даже будет через некоторое время.
«менеджер two-phase коммита» ведёт свой лог. После рестарта он поймёт что происходило и сделает правильный recovery.
Я тоже так думал, до тех пор пока Пётр Зайцев, на конференции, наглядно не посчитал, что при записи 100МБ/сек одного SSD хватит на 3 года. У нас трафик поменьше, так что волноваться не стоит. Диск умрёт раньше из-за каких-нибудь других причин :)
3. Если я правильно понял вопрос, то ответ такой — это просто набор sql скриптов, которые конвертируют базу при старте сервера.
1. У нас всё просто. Обновление на ходу мы не можем делать по 101 причине, поэтому устраивается «профилактика» в ходе которой все сервера гасятся и на них накатывается обновлённый код, ресурсы и т.п. При старте сервер автоматически конвертирует базу, добавляет туда индексы, переформатирует таблички и т.п. Скрипты конвертации зашиты в сервер и пишутся руками.

2. Логи бывают двух видов.
Просто логи сервера мы храним в файликах, но пытаемся прикрутить фейсбучный Scribe.
Логи покупок и прочих игровых действий мы храним в специальной большой базе/системе для гейм мастеров. Но про неё много очень писать надо, потом, может быть статья будет. Stay tuned :) Основная её идея в том, что она заточена под террабайты данных. Её делают специальные люди, и да, она совсем не простая :)
С помощью распределённой транзакции.
Концепт: en.wikipedia.org/wiki/Distributed_transaction
Приложение концепта к postgresql: www.postgresql.org/docs/9.2/static/sql-commit-prepared.html
Библиотечка, которая помогает нам дёргать всё это из Java: docs.codehaus.org/display/BTM/Home
«Маленькие базы» делятся на типы, и их у нас около 12. Внутри одного типа структура одинаковая, и данные размазаны между базами. Связь между ними осуществляется посредством распределённых транзакций или не осуществляется вовсе, если это не нужно :)

Если произошел обмен предметом между двумя игроками, мы логируем это в специальную систему для гейм мастеров, но про неё я пока ничего скажу, это предмет отдельной и большой статьи.
Ждать стоит, игра крутая. Когда — сказать не могу. NDA.
Что-то вроде Active record, через Hibernate. Запросы руками пишем крайне редко, в исключительных случаях для перфоманса.
В видео есть немного того самого «ещё» :) В том числе и интересная Q/A сессия.

Информация

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