|
PHP / MySQL Создание динамических Веб-ресурсов |
12.01.2015, 10:21
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Бинарные данные в MySQL
В общем обращаюсь к знатокам MySQL. Я решил хранить данные машинок в таблицах БД. Таблица сейчас примерно такая:
Обращаюсь к этой таблице в следующих случаях: - Сохранение машинки в момент выхода из режима редактирования (чтение blocks, запись data)
- Чтение данных машинки при создании боя для передачи на геймсервер (чтение data)
В blocks хранится в бинарном виде список id блоков и их количества в данной машинке. В data - данные машинки.
Вопрос: Какой тип таблицы подойдет больше, InnoDB или MyISAM?
|
(Offline)
|
|
12.01.2015, 10:46
|
#2
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Бинарные данные в MySQL
MyISAM.
Если есть паранойя, то имеет смысл вынести в файлы. MyISAM может порушиться с концами.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.01.2015, 10:50
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные данные в MySQL
А из-за чего MyISAM может сломаться?
|
(Offline)
|
|
12.01.2015, 10:56
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Бинарные данные в MySQL
Сообщение от pax
А из-за чего MyISAM может сломаться?
|
IO ерунда с диском.
Или если очень яростно писать и читать может произойти подвисание таблицы из-за блокировок, а она там целиком лочится.
Если нужен частый доступ, то InnoDB, да и надёжнее. На самом деле да, бери-ка лучше InnoDB. Будет немного медленнее, но профиты на лицо. При записи не вся таблица лочится и если крешнется можно будет починить без бубна.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
12.01.2015, 11:07
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные данные в MySQL
А по поводу того, что таблица будет кешироваться в память? InnoDB же имеет буфер для таблиц. У меня примерно данных будет порядка 3 гб на миллион пользователей...
|
(Offline)
|
|
12.01.2015, 11:53
|
#6
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Бинарные данные в MySQL
С MyISAM проблем не будет, просто юзать нормальный рейд, ну и не держать сервер дома под столом. Запись, чтение к тому же будет происходить очень редко, судя по целям таблицы.
А вообще в таких случаях MySQL не юзать, те же файлы лучше будут.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.01.2015, 11:54
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные данные в MySQL
Не очень хочется иметь дело с миллионами файлов...
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
12.01.2015, 17:57
|
#8
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Бинарные данные в MySQL
Тут скорее простое key<>value хранилище подошло бы если уж совсем никак с файлами иметь дел не хочется.
Но я бы лично хранил бы в файлах.
Также таблица будет расти с ростом пользователей, или усложнением данных. В один момент нужно будет это дело как-то масштабировать? Если чтение редкое конечно можно и все на одной машине держать, но тут если у тебя не будет хватать трафика уже, либо упрешся в IO, то масштабирование нужно будет. И с файлами это весьма не сложно провернуть, с бд все в разы сложнее.
Также бэкапы, с файлами, можно делать бекапы только модифицированных файлов, и написаниет такого скрипта будет выше.
Производительность загрузки данных с файлов, будет выше чем через бд, также загрузка файлов не будет иметь практически никакого давления на RAM и CPU в отличии от базы данных.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
12.01.2015, 18:19
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные данные в MySQL
Просто будет миллионы файлов по 0,5кб - 1,5кб. Я что-то с трудом представляю как в этом случае будет делаться бэкап нормально...
Т.е. для данных по блокам в машинке делать отдельную таблицу vehicle_id, block_id, count вместо поля blocks, а данные машинки вынести в файлы?
|
(Offline)
|
|
12.01.2015, 18:29
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Бинарные данные в MySQL
Да если данные на столько мелкие, то лучше key<>value хранилище.
Для бэкапов, можно писать в бд id файла который модифицировался, при модификации файла. Затем скрипт грузит этот список, собирает все измененные файлы в tar и заливает на тот же S3, и обнуляет таблицу id.
Вот вам и весь diff бэкап. Периодически нужно будет делать полный бэкап и удалять все прошлые diff'ы.
Но tar'нуть миллионы файлов, задача не столь сложная для нормального stream'ового скрипта (на node пишется быстро). Можно даже с gzip трансформом.
Хотя можно взять просто key<>value бд, например cassandra и там хранить такое будет в разы проще и очень оптимально, также cassandra маштабируется хорошо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.01.2015, 18:31
|
#11
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Бинарные данные в MySQL
Просто vehicle_id, а в соответствующем файле все данные и о машинке и ее блоках. Пока игрок онлайн в памяти держать, писать в файл при сохранении игроком изменений.
У нас один клиент есть с 15млн файлов, регулярно обновляющихся, rdiff-backup (где-то упоминал уже) используем с ним, быстро делает. А вообще и простенького скриптика сравнения даты изменения файлов или хеш-сумм хватит.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.01.2015, 22:21
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные данные в MySQL
Прочиатл про кассандру, что-то сильно сложно для меня. В общем буду думать, стоит ли выносить в файлы, или нет.
|
(Offline)
|
|
13.01.2015, 12:55
|
#13
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Бинарные данные в MySQL
У меня в практике наоборот однажды проблема с InnoDB случилась, таблица покрошилась. Меня это коснулось косвенно, но сисадмин долго матерился и чо-то там чинил, и сказал, чтобы юзали MyISAM, несмотря на её недостатки. Осадок остался, поэтому сейчас использую InnoDB только там, где это критично.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:35.
|