在我目前的项目中,我正在尝试统一查询语言来访问异构数据库。异构数据库意味着它们访问数据的查询语言不同。例如,SQL 是一种用于从 Apache Derby 访问数据的查询语言,而非 SQL 是用于 MongoDB 的。
我的问题是“是否有任何特定领域的语言被提议用来统一异构数据库?”
请随时指导我的其他努力。
There is a project called Hibernate OGM, which aims to generalize JPQL to NoSQL databases.
From their web page:
Hibernate Object/Grid Mapper (OGM) aims at providing Java Persistence (JPA) support for NoSQL solutions. It reuses Hibernate Core's engine but persists entities into a NoSQL data store instead of a relational database. It reuses the Java Persistence Query Language (JP-QL) to search their data.
I don't tried it out for myself, so I cannot say how usefull it is.
JSONiq可以处理来自不同 SQL 和 NoSQL 产品的数据。 JSONiq 的开源实现具有用于 Couchbase、Oracle NoSQL、SQLite 和 JDBC 的连接器。例如,下面的幻灯片展示了在 Couchbase 和 MongoDB 上执行的相同查询:https ://speakerdeck.com/wcandillon/jsoniq-the-sql-of-nosql
这是一个相当有趣的问题。至少有一种建议的解决方案称为 UnQL(非结构化数据查询语言) - http://www.couchbase.com/press-releases/unql-query-language。
我想开箱即用的 UnQL 至少适用于 CouchDB 和 SQLite。这似乎是向前迈出的一大步。
我个人会说这样的任务似乎是一项棘手的任务,因为结构化和非结构化数据方法之间的概念差异。无论如何,为某个应用程序使用的定义良好的 SQL 和 NoSQL 数据模型开发这样的 DSL 应该是相对容易的。
SPARQL是一种 W3C 标准化的查询语言,它工作在抽象数据模型 ( RDF ) 之上,而不是特定类型的数据库,这使得它非常适合作为异构数据库查询的推动者。
SPARQL 的实现存在于各种 NoSQL 数据库之上,包括原生 RDF 数据库(通常称为三元存储),以及关系数据库之上。