将SQL接口公开给我的应用程序的最简单方法是什么?

时间:2009-09-06 21:09:30

标签: java sql interface parsing optimization

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

我想我需要:

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

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

最后一点,我不需要交易,主键,外键,约束等等。谢谢!

澄清

  • 这不会通过网络曝光。它只会由经过培训的可信用户(他们有许多其他更容易的方法来销毁有问题的数据)使用。
  • 优化阶段非常重要,因为我们在各种表中可能会讨论数百GB的数据
  • 这是对现有系统的扩展。我无法更改数据格式,也没有选择抛弃现有系统并将其替换为传统的RDBMS。
  • 首选基于Java的解决方案:)

感谢您的回复,伙计们!

4 个答案:

答案 0 :(得分:2)

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

此外,使用某种JDBC SDK可能有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你的意思是你的'表'不是真正的SQL表吗?并且你希望实现一个SQL接口,实际上不是DMBS,而是你自己的一个?

我认为您最好使用像Derby这样的现有DBMS,让用户直接查询它。

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

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

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

答案 3 :(得分:0)

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

你也可以使用SQLite,其缺点是你没有(至少我最后一次检查过)任何纯Java JDBC驱动程序。这是SQLite格式。

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

您不需要编写解析器BTW - 您需要做的就是从用户捕获SQL并执行它。

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

如果您要通过网络以任何形式公开此内容,您可能需要重新考虑一下。你提出的是黑客的梦想。