forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Бинарные данные в MySQL (http://forum.boolean.name/showthread.php?t=19630)

pax 12.01.2015 10:21

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



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

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

Вопрос: Какой тип таблицы подойдет больше, InnoDB или MyISAM?

Randomize 12.01.2015 10:46

Ответ: Бинарные данные в MySQL
 
MyISAM.
Если есть паранойя, то имеет смысл вынести в файлы. MyISAM может порушиться с концами.

pax 12.01.2015 10:50

Ответ: Бинарные данные в MySQL
 
А из-за чего MyISAM может сломаться?

Randomize 12.01.2015 10:56

Ответ: Бинарные данные в MySQL
 
Цитата:

Сообщение от pax (Сообщение 291654)
А из-за чего MyISAM может сломаться?

IO ерунда с диском.
Или если очень яростно писать и читать может произойти подвисание таблицы из-за блокировок, а она там целиком лочится.
Если нужен частый доступ, то InnoDB, да и надёжнее. На самом деле да, бери-ка лучше InnoDB. Будет немного медленнее, но профиты на лицо. При записи не вся таблица лочится и если крешнется можно будет починить без бубна.

pax 12.01.2015 11:07

Ответ: Бинарные данные в MySQL
 
А по поводу того, что таблица будет кешироваться в память? InnoDB же имеет буфер для таблиц. У меня примерно данных будет порядка 3 гб на миллион пользователей...

DStalk 12.01.2015 11:53

Ответ: Бинарные данные в MySQL
 
С MyISAM проблем не будет, просто юзать нормальный рейд, ну и не держать сервер дома под столом.:) Запись, чтение к тому же будет происходить очень редко, судя по целям таблицы.
А вообще в таких случаях MySQL не юзать, те же файлы лучше будут.

pax 12.01.2015 11:54

Ответ: Бинарные данные в MySQL
 
Не очень хочется иметь дело с миллионами файлов...

moka 12.01.2015 17:57

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

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

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

Производительность загрузки данных с файлов, будет выше чем через бд, также загрузка файлов не будет иметь практически никакого давления на RAM и CPU в отличии от базы данных.

pax 12.01.2015 18:19

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

Т.е. для данных по блокам в машинке делать отдельную таблицу vehicle_id, block_id, count вместо поля blocks, а данные машинки вынести в файлы?

moka 12.01.2015 18:29

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

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

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

DStalk 12.01.2015 18:31

Ответ: Бинарные данные в MySQL
 
Просто vehicle_id, а в соответствующем файле все данные и о машинке и ее блоках. Пока игрок онлайн в памяти держать, писать в файл при сохранении игроком изменений.
У нас один клиент есть с 15млн файлов, регулярно обновляющихся, rdiff-backup (где-то упоминал уже) используем с ним, быстро делает. А вообще и простенького скриптика сравнения даты изменения файлов или хеш-сумм хватит.:)

pax 12.01.2015 22:21

Ответ: Бинарные данные в MySQL
 
Прочиатл про кассандру, что-то сильно сложно для меня. В общем буду думать, стоит ли выносить в файлы, или нет.

Phantom 13.01.2015 12:55

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


Часовой пояс GMT +4, время: 04:25.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot