我决定尝试一下MongoDB,看看我们相处得如何。我确实有一些问题。
这是我到目前为止所拥有的:
{
_id : objectid,
Name: "bob",
Email: "bob@bob.com",
...
Stamps: [stampid-1, stampid-543,...,stampid-23]
}
ensureindex
可以减少“扫描”条目的数量。The accepted answer here不断更改索引。这仅仅是为了解释它还是这样做的方式?我的意思是它确实有道理,但我一直在用sql术语来思考它......它没有任何意义......
答案 0 :(得分:3)
我要做的唯一改变是如何存储用户拥有的邮票。我会存储一个表示邮票的对象数组,并复制更常访问的值。
例如类似的东西:
{
_id : objectid,
Name: "bob",
Email: "bob@bob.com",
...
Stamps : [
{
_id: id,
type: 'type',
price: 20,
forSale: true/false,
quantity: 2
},
{
_id: id2,
type: 'type2',
price: 5,
forSale: false,
quantity: 10
}
]
}
您可以看到某些数据在邮票集合和用户集合中的邮票数组之间重复。您可以使用更频繁访问的属性来执行此操作。因为否则你必须为每个标记执行一个findOne,最好直接读取在MongoDB中执行该操作的数据。这样,您可以在此处添加其他属性,例如数量和forSale。
此处复制的目的是避免对数组中的每个戳记运行查询。
有一个视频链接讨论MongoDB设计,并解释了我在这里尝试解释的内容。
http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/
答案 1 :(得分:0)
来自SQL背景,也在与NoSQL斗争。在我看来,很多事情都取决于不变的数据类型可能有多少,也可能没有。在RDBMS系统中让我感到困惑的一件事是为什么不可能说特定的列/字段是“不可变的”。如果你知道一个字段在NoSQL上下文中是不可变的(或差不多),那么我觉得复制信息更容易被接受。在很多情况下你可能真的想要结合使用SQL和NoSQL结构,这是完全的异端吗?