FoundationDB -通过键值层插入数据,通过sql层读取数据.这可能吗?



我试图将FoundationDB用于某些特定的应用程序,因此我正在寻求有关我无法解决或找到任何有关信息的问题的帮助。

问题是,在应用程序中,我必须通过SQL层(特别是ODBC驱动程序)读取数据。然而,我可以,甚至我更愿意,用标准键值层(而不是通过SQL层)插入数据。

所以问题是——这可能吗?你能帮我提供一些信息或者至少告诉我去哪里找吗(我自己没有找到任何简短的信息)?

我相信通过SQL层插入数据可能效率较低,这似乎是可以理解的(因为DB本身不是SQL),或者我在这里错了?

请不要关注这种方法的合理性,因为这是一个实验性的学术项目:)。

谢谢你的帮助!

尽管你要求不要,我还是要给你一个大大的警告:这条路上有龙!

这样想:写数据总是像SQL层期望的那样将不得不重新实现SQL层

学术示范如下:)

起始表和行:

CREATE TABLE test.t(id INT NOT NULL PRIMARY KEY, str VARCHAR(32)) STORAGE_FORMAT tuple;
INSERT INTO test.t VALUES (1, 'one');

Python读取当前行并添加新行:

import fdb
import fdb.tuple
fdb.api_version(200)
db = fdb.open()
# Directory for SQL Layer table 'test'.'t'
tdir = fdb.directory.open(db, ('sql', 'data', 'table', 'test', 't'))
# Read all current rows
for k,v in db[tdir.range()]:
    print fdb.tuple.unpack(k), '=>', fdb.tuple.unpack(v)
# Write (2, 'two') row
db[tdir.pack((1, 2))] = fdb.tuple.pack((2, u'two'))
最后,从SQL中读取数据:
test=> SELECT * FROM t;
 id | str
----+-----
  1 | one
  2 | two
(2 rows)

这里发生了什么:

  • 使用STORAGE_FORMAT选项创建一个键和值为元组的表
  • 插入一行
  • 导入并打开FDB
  • 打开表目录
  • 扫描所有行并解包打印
  • 通过创建包含期望值的元组来添加新行

密钥包含三个组件(类似于(230, 1, 1)):

  • 目录前缀
  • 表的序数, SQL层表组
  • 中的标识符。
  • PRIMARY KEY的值

该值包含表中的列,按照它们声明的顺序。

现在我们有了一个简单的概念证明,这里有几个原因为什么保持数据正确是具有挑战性的:

  • 未检查架构生成、元数据和数据格式版本
  • 主键没有维护,仍然是"内部"格式
  • 没有二级索引需要维护
  • 表组中不需要维护其他表(即测试表是单个表组)
  • 在线DDL被忽略,这(基本上)使DML
  • 期间要做的工作量增加了一倍。
同样重要的是要注意,这些注意事项仅适用于写入要通过SQL层访问的数据。相反,读取SQL层编写的数据,要容易得多,因为它不必担心这些问题。

希望这能给你一个范围的感觉!

相关内容

  • 没有找到相关文章

最新更新