总体来说,我的印象是你正在考虑建立一个报告的应用程序,这是非常行列导向。一般来说,RavenDB可能不适合这种应用程序的正确技术,但你的里程可能会有所不同。
1. RavenDB可以在合理的查询时间内处理几个彼此相关的表(连接)中的几百万条记录吗?
是在数百万条记录上。总是测试是肯定的,并考虑扩展,即分片,以超过一个实例来传播负载。
没有关于“相关表和连接”的概念。这不是RavenDB的工作方式(你不希望它)。阅读Grohking Document Databases上的RavenDB Mythology部分,为什么会出现这种情况。根据你的描述,尽管你可能会做你想做的事情。你会想要熟悉RavenDB的索引方式。
2.系统会每天创建条目情侣对表的几千个条目,应该有一种方法来批量这些表备份表中移动旧记录(最好可以使用其他数据文件),以便有这些关键表上的行数的上限。所以这个数据库支持批量数据移动操作?
可能不需要移动旧记录。也许把他们留在原地并在别处写新的。如果您愿意,您可以利用Raven中的分片功能根据时间将数据分割为多个分段。当您不再需要旧数据时,请移除包含它的分片(将其移至“备份数据库”)。
您还可以利用索引复制并将索引的结果推送到另一个存储区,并使用Expiration Bundle自动删除旧文档。
3.该数据库能够利用多处理器服务器吗?
是的。
4.它提供了哪些数据恢复选项(是否可以进行热备份)?
是的,它基于Esent并且继承了其执行热备份的能力。
5.如果事情出错了,有没有办法切换到另一个数据库系统而无需从头开始编写整个数据层(例如,如果我们使用MySQL,我们可以将它切换到oracle,而没有NHibernate的麻烦)?
如果它是另一个文档数据库,也许。但看到上面的第一点。您将很难将文档和关系数据库视为可立即交换的技术。如果你向上移动一层抽象,持久性就是持久性,但我认为你说这个问题的方式,答案是“不”。
RavenDB是一个文档数据库,没有表,没有加入。不是将所有的订单记录放在一个地方,而是把所有的订单记录放在一个完全不同的地方,而将订单和订单行一起存储在一个订单文档中。因此,为了得到一个订单的行,你不需要**加入,因为他们都已经在同一个文件。这是使用文档数据库的主要优点之一。 –
事实上,我应该重新评论上下文的问题,就像拥有数百万订单和许多OrderLines一样。而且我应该能够获取符合特定条件的一组OrderLines。主要是为了报道。 –