Хочу повторить подобие игры "Сапер" или другой подобной (это неважно) в многопользовательском режиме.
Суть в следующем:
1. Юзер заходит, играет, выходит, в БД записываются открытые/закрытые клетки.
2. Пользователь заходит через день (условно) - у него восстанавливается последняя версия игры.
Сейчас рассматриваю следующие варианты хранения:
1. 1 клетка - отдельная запись в БД (Если поле на 16 клеток - это 16 записей). Проблема - у пользователя в теории может быть неограниченное количество клеток, а это значит таблица быстро разрастется.
2. Хранить все в виде JSON в одном поле БД и на фронте распарсивать в нужную структуру.
Обновлять записи в БД, я, скорей всего, планирую по каждому клику, а не в конце игры все сразу.
Как лучше поступить в данном случае?
Возможно, есть альтернативное решение?
lexstile дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац).
В противном случае ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
kocherman, честно - не задумывался, сложно предугадать.
Пока смотрю на небольшие показатели и не фантазирую со статистикой.
Если хранить в JSON в одном поле, то можно и один раз в самом конце, вопрос в том - как я пойму, что человек закончил игру, если он решит продолжить через час/день/неделю?
Он может зайти, открыть одну клетку и выйти, а завтра решит продолжить.
lexstile, я просто складывал сапёр наверное больше 10000 раз. За себя могу сказать точно, если я закрыл игру, я не захочу продолжать её завтра. То есть завтра я начну с новой игры.
lexstile, возможно, просто неудачный пример. Просто у меня github находит 21452 реализаций сапёра. Каких решений там только нет... Даже есть на чистом HTML+CSS без JS. Я думаю там найдётся на чистом SQL без HTML.
lexstile, я недавно тут решал задачку. Есть таблица 9х9 с некоторыми заполнеными ячейками (числа от 1 до 9), необходимо решить судоку на языке SQL одним запросом.
Друг, тебе вообще заняться нечем? Реализовывать игру, которая есть и без того на всех компьютерах. Зачем там БД? ведь игра однопользовательская и на время.
1. Это пример, ее (игру Сапер) я реализовывать не буду, но часть функционала будет очень похожа.
2. Это будет веб-приложение, следовательно нужно хранить результаты.
kocherman, я тут подумал, если хранить данные в виде строки - нули и единицы, где единицы - открытые клетки, а нули - закрытые.
А клетки, под которыми что-то есть обозначать иначе, например - "B" и "U" от blocked и unblocked
Пример закрытого поля из 6 клеток, где 3 за собой что-то скрывают: 0B0BB0
Если пользователь открывает пустую клетку 0 меняется на 1, в противном случае "B" меняется на "U"
kocherman, эм, не совсем понял, но в моем кейсе - клетка может быть открыта/закрыта/под ней может что-то лежать. Другой дополнительной ифнормации не будет.