最近,我正在阅读关于FoundationDB中的层的概念。我喜欢他们的想法,从一边分解存储,从另一边进入。
关于层的实现有一些不明确的地方。尤其是他们和存储引擎的通信方式。有两个可能的答案:它们是服务器节点的一部分,并通过快速本地API调用(例如,托管在服务器进程中的链接模块)与存储进行通信--或托管在客户端应用程序中,并通过网络协议进行通信。例如,许多RDBMS的SQL层托管在服务器上。FoundationDB的情况如何?
PS:这两种情况与性能视图不同,特别是当临床服务器通信是高延迟时。
发布于 2013-10-28 13:49:00
层位于客户端库功能的顶部。引用自http://community.foundationdb.com/questions/153/what-layers-do-you-want-to-see-first
这是个好问题。在服务器上运行层并不总是有意义的一个原因是,在分布式数据库中,数据是分散的--服务器本身就像客户端一样,是一个远离随机数据的网络跳转。 当然,对于像分析层这样知道每个服务器包含什么数据的层,运行与FDB集群中的每台机器共存的分布式版本是有意义的。
发布于 2014-01-17 15:22:14
扩展Eonil所说的:答案取决于“客户端”和“服务器”两种不同含义之间的区别。
层不在数据库服务器进程中运行。他们使用FDB客户端API对数据库进行请求,并且(除了一个例外*)不能穿透事务性键值抽象。
但是,没有什么可以阻止您在与数据库服务器进程相同的物理(或虚拟)服务器机器上运行这些层。而且,正如该社区站点上的帖子所提到的那样,有些用例您可能非常希望这样做,以尽量减少延迟。
*例外是局部性API,它在您想要将客户端层与它们所操作的数据一起定位的情况下非常有用。
https://stackoverflow.com/questions/19593857
复制相似问题