如何在 MongoDB 中存储西洋双陆棋棋盘?
How can I store a backgammon board in MongoDB?
我是 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
的块。
有没有更好的结构?另外,我希望获得有关 well/awful 此结构如何执行的提示和技巧。
考虑到您只有 1 个 document
且大小相对恒定,您可以放心地假设这 1 个 document
将保留在内存中,因此您不必太担心更多关于性能问题,因此它只是一个文档 - 它基本上是在询问我的 HashMap
性能如何...
如果由我决定,我会将条形分成 2 个条形 - bBar
和 wBar
(顺便说一句,在现实生活中,每个玩家旁边都有自己的条形图保留他自己的"eaten"件。
顺便说一下,任何涉及最佳着法的计算都应该在内存中进行。您不应将中间计算结果存储在 DB
我是 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
的块。
有没有更好的结构?另外,我希望获得有关 well/awful 此结构如何执行的提示和技巧。
考虑到您只有 1 个 document
且大小相对恒定,您可以放心地假设这 1 个 document
将保留在内存中,因此您不必太担心更多关于性能问题,因此它只是一个文档 - 它基本上是在询问我的 HashMap
性能如何...
如果由我决定,我会将条形分成 2 个条形 - bBar
和 wBar
(顺便说一句,在现实生活中,每个玩家旁边都有自己的条形图保留他自己的"eaten"件。
顺便说一下,任何涉及最佳着法的计算都应该在内存中进行。您不应将中间计算结果存储在 DB