如何在MongoDB中存储步步高板?

时间:2015-05-17 05:47:33

标签: mongodb database-design nosql

我是NoSQL数据库的新手,虽然我已经很多地寻找它,但是我找不到这种方法的最佳实践。

步步高,对于那些不知道的人来说,是一个有24个点子(或插槽)的棋盘游戏,还有一个可以包含任何颜色的棋子的棋子(被击中的棋子放在酒吧)。另外,每个点(或槽)可以包含一个或多个相同颜色的块。

我正在寻找的结构应该进行优化,以帮助我快速计算两件事:

  • 此举有效吗?要使移动有效,目标槽必须少于两个相对的颜色。例如,如果我想移动到插槽4,并且我是黑色的,插槽4必须要么只有1个白色部分(在移动后会被击中),或者没有部分,或者有一个或多个黑色部分。
  • 每个玩家的点数是多少?点数是总共要赢得比赛的骰子数。为此,我需要能够快速检索整个板上一种颜色的碎片的位置。计算将在数据库之外的本地完成。如果您对我在检索查询结果后如何计算点数计数感到好奇,请查看Beginner's Guide to Counting Pips

我想到的结构是这样的:

{
    1: {
        color: 'black',
        pieces: 2
    },
    2: {
        color: 'white',
        pieces: 1
    },
    3: {}
    // etc, until 24
    24: {}
    bar: {
        {
            color: 'white',
            pieces: 1
        }
    }
}

这种方法的唯一问题,正如您无疑可以看到的那样,是bar。由于条形图可以包含任何颜色的碎片,因此我必须在bar键内创建另一个对象,以便稍后可以根据需要添加颜色为black的碎片。

有更好的结构吗?此外,我很欣赏这个结构表现得如何/糟糕的提示和技巧。

1 个答案:

答案 0 :(得分:2)

考虑到你只有1 document具有相对恒定的大小,你可以放心地假设这1 document将保留在内存中,因此你不应该过多担心性能问题更多,只有一个文件 - 它基本上是问我的HashMap表现有多好......

如果由我决定,我会把酒吧分成2个栏 - bBarwBar(就像在现实生活中一样,每个玩家旁边都有自己的酒吧来保持他的自己“吃掉”的作品。)

顺便说一下,任何涉及最佳动作的计算都应该在内存中进行。您不应将中间计算结果存储在DB