【问题标题】:Read-only keys in RavenDb or... interopability between RavenDb and Azure Table StorageRavenDb 中的只读密钥或... RavenDb 和 Azure 表存储之间的互操作性
【发布时间】:2014-06-24 04:05:28
【问题描述】:

我希望在 RavenDb 数据库中为客户托管一些配置参数,同时在 Azure 表存储中为这些参数每分钟生成大量数据点。我需要一种基本的方式来连接 RavenDb 和 ATS。显然,这种连接是通过键来完成的。我的问题是 RavenDb 在其所有 Id 字段中都使用正斜杠,而 ATS 在 PartitionKey 或 RowKey 中使用正斜杠时会呕吐。

我的问题如下:我的 RavenDb 实体中是否可以有一个只读的 Id 键(没有设置器)。这种键方法将返回基于 Guid 的键的值,该键前面带有“entity/”前缀。这样,我也可以将基于 Guid 的 ID 密钥存储在 raven 实体中,并能够将 ravenEntity.RootId (guid) 与 storageEntity.PartitionKey (基于 guid 的字符串) 进行比较。我担心即使我的实体似乎坚持到 Raven 并正常加载。我可能对一些更晦涩的功能有问题?

是否有其他建议或可能制定的方法来处理这种关系?

【问题讨论】:

    标签: ravendb azure-table-storage


    【解决方案1】:

    所以您只需要 RavenDB 模型中的一些东西,一旦创建就不会改变,您可以使用它来关联您存储在 Azure 表存储中的关联数据?

    好吧,假设你的 RavenDB 的文档 ID 不会改变(它不能,因为那样它将是一个不同的文档)你可以使用一个使用文档 ID 的确定性 guid。

    public class MyModel
    {
        public string Id { get; set; }
    
        // Other stuff
    
        [JsonIgnore]      // <--- This really doesn't need to be persisted to RavenDB
        public string AzureLookupKey
        {
            get { return "entity/" + Utils.GetDeterministicGuid(this.Id).ToString("n"); }
        }
    }
    

    GetDeterministicGuid(inputString) 方法可以随心所欲地实现,尽管 SO 问题 How to Create Deterministic Guids 在问题中有一个很好的例子,在答案中还有其他可能性。

    除了使用[JsonIgnore] 来阻止RavenDB 将数据序列化到数据库之外,您还可以将其设为方法。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多