Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 12.01.2015, 07:21   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Бинарные данные в MySQL

В общем обращаюсь к знатокам MySQL. Я решил хранить данные машинок в таблицах БД. Таблица сейчас примерно такая:



Обращаюсь к этой таблице в следующих случаях:
  • Сохранение машинки в момент выхода из режима редактирования (чтение blocks, запись data)
  • Чтение данных машинки при создании боя для передачи на геймсервер (чтение data)

В blocks хранится в бинарном виде список id блоков и их количества в данной машинке. В data - данные машинки.

Вопрос: Какой тип таблицы подойдет больше, InnoDB или MyISAM?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.01.2015, 07:46   #2
Randomize
Терабайт исходников
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: Планета Земля
Сообщений: 4,027
Написано 2,244 полезных сообщений
(для 6,300 пользователей)
Ответ: Бинарные данные в MySQL

MyISAM.
Если есть паранойя, то имеет смысл вынести в файлы. MyISAM может порушиться с концами.
__________________
Retry, Abort, Ignore? █
Пека: AMD Athlon II x4 2.6Ghz; 8Gb ram; Nvidia Geforce GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (12.01.2015)
Старый 12.01.2015, 07:50   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Ответ: Бинарные данные в MySQL

А из-за чего MyISAM может сломаться?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.01.2015, 07:56   #4
Randomize
Терабайт исходников
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: Планета Земля
Сообщений: 4,027
Написано 2,244 полезных сообщений
(для 6,300 пользователей)
Ответ: Бинарные данные в MySQL

Сообщение от pax Посмотреть сообщение
А из-за чего MyISAM может сломаться?
IO ерунда с диском.
Или если очень яростно писать и читать может произойти подвисание таблицы из-за блокировок, а она там целиком лочится.
Если нужен частый доступ, то InnoDB, да и надёжнее. На самом деле да, бери-ка лучше InnoDB. Будет немного медленнее, но профиты на лицо. При записи не вся таблица лочится и если крешнется можно будет починить без бубна.
__________________
Retry, Abort, Ignore? █
Пека: AMD Athlon II x4 2.6Ghz; 8Gb ram; Nvidia Geforce GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
impersonalis (12.01.2015), pax (12.01.2015)
Старый 12.01.2015, 08:07   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Ответ: Бинарные данные в MySQL

А по поводу того, что таблица будет кешироваться в память? InnoDB же имеет буфер для таблиц. У меня примерно данных будет порядка 3 гб на миллион пользователей...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.01.2015, 08:53   #6
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 436
Написано 346 полезных сообщений
(для 946 пользователей)
Ответ: Бинарные данные в MySQL

С MyISAM проблем не будет, просто юзать нормальный рейд, ну и не держать сервер дома под столом. Запись, чтение к тому же будет происходить очень редко, судя по целям таблицы.
А вообще в таких случаях MySQL не юзать, те же файлы лучше будут.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (12.01.2015)
Старый 12.01.2015, 08:54   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Ответ: Бинарные данные в MySQL

Не очень хочется иметь дело с миллионами файлов...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
L-ee-X (16.07.2015), Mr_F_ (12.01.2015)
Старый 12.01.2015, 14:57   #8
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,400
Написано 3,422 полезных сообщений
(для 6,740 пользователей)
Ответ: Бинарные данные в MySQL

Тут скорее простое key<>value хранилище подошло бы если уж совсем никак с файлами иметь дел не хочется.

Но я бы лично хранил бы в файлах.
Также таблица будет расти с ростом пользователей, или усложнением данных. В один момент нужно будет это дело как-то масштабировать? Если чтение редкое конечно можно и все на одной машине держать, но тут если у тебя не будет хватать трафика уже, либо упрешся в IO, то масштабирование нужно будет. И с файлами это весьма не сложно провернуть, с бд все в разы сложнее.

Также бэкапы, с файлами, можно делать бекапы только модифицированных файлов, и написаниет такого скрипта будет выше.

Производительность загрузки данных с файлов, будет выше чем через бд, также загрузка файлов не будет иметь практически никакого давления на RAM и CPU в отличии от базы данных.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
DStalk (12.01.2015), impersonalis (12.01.2015), pax (12.01.2015), St_AnGer (12.01.2015)
Старый 12.01.2015, 15:19   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Ответ: Бинарные данные в MySQL

Просто будет миллионы файлов по 0,5кб - 1,5кб. Я что-то с трудом представляю как в этом случае будет делаться бэкап нормально...

Т.е. для данных по блокам в машинке делать отдельную таблицу vehicle_id, block_id, count вместо поля blocks, а данные машинки вынести в файлы?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.01.2015, 15:29   #10
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,400
Написано 3,422 полезных сообщений
(для 6,740 пользователей)
Ответ: Бинарные данные в MySQL

Да если данные на столько мелкие, то лучше key<>value хранилище.
Для бэкапов, можно писать в бд id файла который модифицировался, при модификации файла. Затем скрипт грузит этот список, собирает все измененные файлы в tar и заливает на тот же S3, и обнуляет таблицу id.

Вот вам и весь diff бэкап. Периодически нужно будет делать полный бэкап и удалять все прошлые diff'ы.
Но tar'нуть миллионы файлов, задача не столь сложная для нормального stream'ового скрипта (на node пишется быстро). Можно даже с gzip трансформом.

Хотя можно взять просто key<>value бд, например cassandra и там хранить такое будет в разы проще и очень оптимально, также cassandra маштабируется хорошо.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (12.01.2015)
Старый 12.01.2015, 15:31   #11
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 436
Написано 346 полезных сообщений
(для 946 пользователей)
Ответ: Бинарные данные в MySQL

Просто vehicle_id, а в соответствующем файле все данные и о машинке и ее блоках. Пока игрок онлайн в памяти держать, писать в файл при сохранении игроком изменений.
У нас один клиент есть с 15млн файлов, регулярно обновляющихся, rdiff-backup (где-то упоминал уже) используем с ним, быстро делает. А вообще и простенького скриптика сравнения даты изменения файлов или хеш-сумм хватит.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (12.01.2015)
Старый 12.01.2015, 19:21   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,470
Написано 2,933 полезных сообщений
(для 5,168 пользователей)
Ответ: Бинарные данные в MySQL

Прочиатл про кассандру, что-то сильно сложно для меня. В общем буду думать, стоит ли выносить в файлы, или нет.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 13.01.2015, 09:55   #13
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 1,988
Написано 618 полезных сообщений
(для 1,558 пользователей)
Ответ: Бинарные данные в MySQL

У меня в практике наоборот однажды проблема с InnoDB случилась, таблица покрошилась. Меня это коснулось косвенно, но сисадмин долго матерился и чо-то там чинил, и сказал, чтобы юзали MyISAM, несмотря на её недостатки. Осадок остался, поэтому сейчас использую InnoDB только там, где это критично.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (13.01.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 20:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com