我使用MongoDB和C#驱动程序来存储这个实体:
public class Receipt
{
[BsonId]
public string Id { get; set; }
//...
}
此ID是由移动客户端(android / iphone)从外部生成的UUID,并以字符串形式发送到服务器,如下所示:
“FD8E8599-9B63-404E-86E3-2EE1BA7F91E6”
与将其存储为二进制文件相比,是否存在重新划分性能(读/写)或其他可用性问题的差异:
public class Receipt
{
[BsonRepresentation(BsonType.Binary)]
public byte[] Id { get; set; }
//...
}
(第一种方法是首选方法,因为我不需要将传入的字符串转换为字节数组)
答案 0 :(得分:1)
字节数组将使用20个字节进行存储(4个字节用于存储数组长度,16个字节用于存储128位uuid值)。
字符串版本将使用41个字节用于存储(4个字节用于存储长度,36个字节用于存储utf8字符用于uuid的字符串表示,1个字节用于存储终止空字符,即\ x00)。 / p>
我会将其存储为字符串,因为在查询集合时更容易使用它。
如果要快速访问记录,则应在Id属性上定义单个字段索引。
有关详细信息,请参阅http://docs.mongodb.org/manual/core/index-single/。
答案 1 :(得分:0)
UUID
(GUID)
由C#驱动程序隐式转换为BSON::Binary
,您可以在the documentation中看到,我们可以从MongoDB文档中看到:
为了更有效地存储集合中的UUID值 在_id索引中,将UUID存储为BSON BinData类型的值。 BinData类型的索引键可以更有效地存储 索引if:二进制子类型值在0-7或0的范围内 128-135,字节数组的长度为:0,1,2,3,4,5,6,7, 8,10,12,14,16,20,24或32。
您的UUID
(GUID
)位于该范围内,因此效果会比String
表示增加(很多)。