MongoDB C# - 将UUID存储为字符串与二进制的差异?

时间:2015-07-09 23:47:32

标签: c# mongodb mongodb-.net-driver uuid

我使用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; }
        //...
    }  

(第一种方法是首选方法,因为我不需要将传入的字符串转换为字节数组)

2 个答案:

答案 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)

UUIDGUID)由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。

您的UUIDGUID)位于该范围内,因此效果会比String表示增加(很多)。