Я работаю над игрой, в которой игрок переключается между серверами на основе их местоположения в игровом мире, чтобы создать иллюзию единого сервера, сохраняя при этом масштабируемость. Когда игрок присоединяется к серверу, их данные загружаются из базы данных (MongoDB), а когда они покидают или меняют сервер, их данные сохраняются.Сохранение только измененных полей
Проблема возникает из-за того, что данные игроков изменяются с отдельного сервера от игрока, что должно происходить изредка. Данные в базе данных изменяются, но когда игрок покидает или меняет сервер, данные переписываются:
Для решения этой проблемы я думал хранить только измененные данные, так как обычно данные, которые вы хотите, совсем недавно изменили. Однако, пытаясь найти способы сделать это, я заметил отсутствие случаев, когда это было сделано. Есть ли веские причины не делать этого и использовать другой метод для того, чтобы измененные данные не были перезаписаны? Единственная проблема, о которой я мог думать, - это согласованность данных, когда поля обновляются, и только некоторые из них перезаписываются, что потенциально может привести к неверному состоянию игрока, чего можно было бы избежать довольно легко, обновив все зависимые поля вместе.
Если есть какие-либо другие причины, препятствующие сохранению только одного объекта или любых других способов решения этой проблемы, которые не представляют никаких серьезных проблем, я хотел бы услышать о них.
Возможно, вам стоит подумать, что, хотя вы правильно объяснили свое дело, это все еще слишком широкий вопрос в целом. То, что вы просите действительно (и можете искать), является общей «грязной» концепцией. Это означает, что данные, которые фактически «изменены», являются «единственными» данными, которые вы хотите изменить. В концепции конечного хранилища MongoDB и другие двигатели имеют способы «только» модифицировать эти данные. Как только вы определили, что вы хотите изменить, конечно. –
Просто для комментариев. На «милой» стороне. Если вы отправили «объект» в MongoDB, который фактически ничем не отличается от существующего объекта, то на самом деле ничего не будет сделано как операция записи. Но то, что вы, кажется, задаете именно здесь, - это способ увидеть, «какие данные» действительно изменились, а затем только передать их как операцию изменения. Как говорилось ранее, немного шире. –
@ user3561036 Этот вопрос был скорее о возможных проблемах с только сохраняющимися частями объектов и альтернативами для этого, чем о реальной реализации. – user2248702