Ravendb 正确的文档设计是什么

Ravendb 正确的文档设计是什么,ravendb,Ravendb,首先是一个警告:我对文档数据库完全陌生,所以我所有的“理解”都来自文档和博客文章,这是我第一次动手工作 我希望实现以下目标: 存储不同类型的文档并管理文档周围的一些元数据 通过以下方式查询数据库: 元数据 元数据和文档属性 特定文档类型的元数据 更新元数据而不必加载整个文档 我的理解是,我有两个选择 将元数据与文档一起保存 public class Metadata { public DateTime ValidFrom { get; set;} public DateTim

首先是一个警告:我对文档数据库完全陌生,所以我所有的“理解”都来自文档和博客文章,这是我第一次动手工作

我希望实现以下目标:

  • 存储不同类型的文档并管理文档周围的一些元数据
  • 通过以下方式查询数据库:
    • 元数据
    • 元数据和文档属性
    • 特定文档类型的元数据
  • 更新元数据而不必加载整个文档
  • 我的理解是,我有两个选择

    将元数据与文档一起保存

    public class Metadata
    {
        public DateTime ValidFrom { get; set;}
        public DateTime? ValidTo { get; set;}
    }
    
    public class DocumentWithMetadata<T>
    {
        public T Document { get; set;}
        public Metadata Metadata { get; set;}
    }
    
    public class Metadata
    {
        public DateTime ValidFrom { get; set;}
        public DateTime? ValidTo { get; set;}
    }
    
    public class DocumentWithMetadata<T>
    {
        public T Document { get; set;}
        public string MetadataId { get; set;}
    }
    
    在这种方法中,我可以使用
    相关文档索引
    功能,并将元数据属性“提升”到文档索引中

    鉴于对于类型为
    T1
    Raven的文档,Raven将创建一个名为
    DocumentWithMetadataOfT1
    的集合,如果所有元数据都在一个集合中,我将如何仅查询T1文档的元数据

    我曾考虑过一些其他方法,比如向元数据添加文档类型属性或反转关系,但所有这些方法看起来都像黑客


    一定有更好的办法。。是不是?

    很难理解你到底想做什么。主要是因为Raven已经有了自己的文档和元数据概念,而且出于某种原因,您正在引入自己的概念


    根据添加到元数据中的
    ValidFrom
    ValidTo
    字段,我猜您正在尝试某种双时有效性或“历史表”。这实际上已经完成了,所以如果这是你想要的,那么你应该使用我的

    谢谢Matt,正如我提到的,我是RavenDB和文档数据库的初学者,所以有很多东西需要学习。作为一个学习项目,我想实施。今晚我将看一看时态版本控制包。临时版本控制包是否可以通过自定义“跟踪字段”进行扩展?例如,谁做了更改?这是一个先进的概念。我的建议是从简单的RavenDB开始,首先适应文档数据库模式。一旦您不再以关系数据库的思维方式思考问题,那么看看时态版本控制,它将对您更有意义。是的,你可以扩展它,但是你不需要做任何特殊的事情。只需存储额外的数据或元数据字段,就可以对它们进行适当的版本控制。关于SCD类型2——是的,这是一个类似的概念,但更多的是OLAP术语。我们处理的是每天的数据转储。这些文件是其他系统中所有数据的快照。这些文件包含高达300K的记录,其中更改率非常小,在最坏的情况下约为1%-1.5%。我想使用校验和来检测更改,只捕获更改的文档(转储文件中的行)。我研究文档数据库的原因是,我不必为我们需要处理的~20个转储中的每一个处理数据库模式。听起来像是在构建数据仓库。这是可能的,但这不是Raven的主要关注点。同样,在你尝试做一些高级的事情之前,先学习基础知识。Raven的
    DocumentSession
    可以判断是否修改了某些内容,但您需要将数据批处理成更小的数据块。大容量导入是可用的,但不会进行您想要的那种差异比较。