我有一个使用SQL Server的应用程序.我想使用NOSQL存储,我认为它是图形,因为我的数据是高度连接的.Neo4j是一个选择.
我希望能够在不触及应用程序层的情况下切换数据库,例如,只修改一些xml配置文件.我已经看过网上公开的一些示例,我看到ORM和OGM没有以相同的方式配置应用程序,每个配置文件都有自己的名称,更重要的是它自己的结构.查看每个代码,发现他们初始化会话的方式也不同,这对我的想法听起来不太好.
我的问题是:"在没有触及现有应用程序代码的情况下在两个数据库之间切换是否可行或可行 - 没有很大的开销?我可能会添加内容但不会触及已存在的内容".在SQL和NOSQL数据库之间建立纯多语言持久性是一个好主意,例如,使用Hibernate.
在深入挖掘之前,我想听听你们的意见.我们在这里有一个Hibernate男人和我们在一起吗?
在个人游戏项目的上下文中,为了解有关DDD模式的更多信息,我错过了我的过滤器的Specification对象.
寻找示例,似乎所有内容(如LinQ)都面向SQL数据库.但是对于许多NoSQL数据库而言,大多数查询,即使只是"select*from table"也需要预定义的视图.然而,如果存储库正在映射Web服务,即使查询类型更加严格.
考虑到非SQL数据库的局限性,是否存在规范模式的变体?我觉得这需要使用继承和静态声明来支持不同类型的持久性后端.
我应该如何在我的存储库中组合"排序"和"过滤"?作为示例,请考虑存储库以获取Order项列表.
(Query)findAllSortedByDate;
(Query)findAllSortedByName;
(Query)findAllSortedByQuantity;
Run Code Online (Sandbox Code Playgroud)
因此,当由表格显示时,这些是不同类型的排序.由于我可能会处理大量结果,因此我从不考虑在视图或视图模型中进行排序或过滤.最初我想到了一个Proyection类,它根据用户操作从存储库中选择正确的查询.但是,如果我想在不同的过滤器中组合不同的排序策略,这不会很好.
显然我需要某种类型的"规范"对象,但我不确定是否:
最初我考虑使用Repository作为类似集合的接口执行任何查询,但现在我注意到视图模型也可能表现为"有状态"类似集合的接口,而前者是"无状态"类似集合的接口.
更新:为了更好地解决这个问题,还要考虑尽管NoSQL视图可以被过滤和排序,但是全文搜索可能需要一个外部索引引擎,例如Lucene或SQLite-FTS,它们只为查询提供实体的唯一标识.再次排序和过滤.
design-patterns domain-driven-design repository nosql polyglot-persistance
在ArangoDB中我有一件事没有得到:
边缘集合和图形之间有什么区别?在哪种情况下我应该选择哪种?