我正在制作一个拥有2D世界的MMO。 (这是一个学习项目,所以不要试图说服我:)我想为它试验一个新的数据存储,我已经阅读了关于redis的好东西。我已经完成了这些教程,我认为我已经开始了解redis的优势,但我不清楚如何为这样一个世界建模。
以下是一些设计要求
你如何用redis建模? redis是不合适的选择吗?
答案 0 :(得分:2)
假设2D世界被分割成已知坐标的正方形,你可能最好在redis中根据返回对象ID(或退出/路径,或地形等)的坐标来生成关键点
e.g。一个非常简单的插图
obj:1:name = Rock
obj:1:passable = false
obj:2:name = Skeleton
obj:2:passable = true
loc:0:0:objs = {1,2} // loc:0:0 contains obj:1 and obj:2
loc:0:0:paths = {0:1, 1:0, 1:1} // three legal paths, to loc:0:1, loc:1:0, loc:1:1
我不足以让redis专家知道这个域名是否会导致你在redis中出现问题,所以请不要理睬我的建议。
答案 1 :(得分:1)
Redis是一个键值商店,并且可能不太适合开箱即用的这项任务,但如果我要对此进行刺戳,我可能会读到R树(或其他空间)面向数据结构)然后将这样的数据结构映射到键值存储模式上。例如,您可以将您的MMO世界设置为 Redis中的R-tree ,方法是让树中的每个节点对应Redis中的特定键,然后将包含边界矩形(和/或其他叶子数据)和指向每个子节点的键列表。
这至少可以让你保持你的值大小受限(一个属性不一定由平坦,统一的网格表示共享),并保持任何给定操作所需的Redis查找次数为log(n)的顺序
玩得开心!听起来像是一种有趣的学习方式。