【问题标题】:What's the easiest way to expose a SQL interface to my application?向我的应用程序公开 SQL 接口的最简单方法是什么?
【发布时间】:2010-11-26 01:58:20
【问题描述】:

我正在开发一个将数据存储在表中的应用程序,类似于 RDBMS。我正在寻找一种方法让我的用户使用 SQL 查询这些数据。理想情况下,我想这样做而不必实现我自己的 SQL 解析器、查询优化器等。到目前为止,从 Apache Derby 之类的东西中提取部分看起来是最好的选择,但我想知道是否有更简单的方法。

我想我需要:

  • SQL 解析器(JavaCC?)
  • 查询优化器
  • 一种执行优化查询的方法

或者,有人知道我可以用我自己的文件/数据格式替换数据存储的任何开源数据库吗?

最后一点,我真的不需要事务、主键、外键、约束等。谢谢!

说明

  • 这不会通过网络公开。它只会被训练有素、受信任的用户使用(他们有许多其他更简单的方法可以销毁相关数据)
  • 优化阶段相当重要,因为我们正在讨论各种表中可能有数百 GB 的数据
  • 这是对现有系统的扩展。我无法更改数据格式,也没有选择丢弃现有系统并用传统 RDBMS 替换它的选项。
  • 首选基于 Java 的解决方案 :)

谢谢大家的回复!

【问题讨论】:

  • 我不得不问一下,通过控制 RDBMS 的低级数据格式,您期望得到什么好处。它们的结构使查询非常有效,因此没有理由考虑提出您自己的格式。您认为自己需要这样的东西是什么?

标签: java sql interface parsing optimization


【解决方案1】:

您的意思是您的“表”不是真正的 SQL 表?并且您希望为实际上不是 DMBS 而是您自己的克隆的对象实现 SQL 接口?

我认为你最好使用现有的 DBMS,比如 Derby,让用户直接查询。

如果您担心数据损坏,您可以提供一些查询过滤。

总而言之,这看起来不是一个明智的决定。

也就是说,您可以通过“存储引擎 API”实现自己的 MySQL 存储引擎,它可以让您定义文件格式(以及更多):

【讨论】:

    【解决方案2】:

    MySQL 支持可插拔存储引擎。 Here 是一个起点。

    另外,也许使用某种JDBC SDK 会有所帮助。

    【讨论】:

      【解决方案3】:

      显而易见(也是最简单)的方法是将数据存储在数据库中。听说您需要实现自己的数据库,并且没有合适的现有数据库,这有点令人惊讶。

      【讨论】:

      • 不幸的是,我没有从头开始实施。在这个系统之上已经有大量的数据和相当多的软件,所以我不能用数据库来代替它。我只是想提供一种更标准的方式来访问它所拥有的数据:)
      【解决方案4】:

      我很确定 HSQLDB 将允许您做您想做的事情,并且还允许您将数据存储在平面文件中。

      您也可以使用 SQLite,这样做的缺点是您没有(至少在我上次检查时)任何纯 Java JDBC 驱动程序。这是 SQLite 格式。

      Apache Derby 和 HSQLDB 都非常轻量级,您不需要将它们剥离。

      顺便说一句,您不需要编写解析器 - 您所需要做的就是从用户那里捕获 SQL 并执行它。

      优化器将是棘手的部分,但这取决于您认为表会变得多大 - 如果它们足够小并且机器足够快,您可能不需要费心。

      如果您打算通过网络以任何 形式公开这一点 - 您可能需要再考虑一下。你提出的是一个黑客的梦想。

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        相关资源
        最近更新 更多