最近我在读到FoundationDB中的层概念。我喜欢他们的想法,从一侧分解存储并从另一侧访问它。
关于这些层的实现,存在一些不清楚的地方。尤其是它们如何与存储引擎通信。有两种可能的答案:它们是服务器节点的一部分,通过快速的本机API调用(例如,作为服务器进程中托管的链接模块)与存储进行通信-OR-托管在客户端应用程序内部并通过网络协议进行通信。例如,许多RDBMS的SQL层托管在服务器上。FoundationDB的情况如何?
PS:这两种情况与性能视图不同,尤其是当 clinent 服务器通信是高延迟时。
扩展Eonil所说的话:答案在于"客户端"和"服务器"两种不同含义之间的区别。
层不在数据库服务器进程中运行。他们使用FDB客户端API来发出数据库请求,并且不会(除了一个例外*)刺穿事务键值抽象。
但是,没有什么可以阻止您在与数据库服务器进程相同的物理(或虚拟)服务器计算机上运行这些层。而且,正如社区网站上的那篇文章所提到的,在某些用例中,您可能非常希望这样做以最大程度地减少延迟。
*局部性 API 除外,它最适用于您希望将客户端图层与其操作的数据放在一起的情况。
图层位于客户端库功能之上。引自 http://community.foundationdb.com/questions/153/what-layers-do-you-want-to-see-first
这是个好问题。它并不总是有意义的一个原因 在服务器上运行层是在分布式数据库中, 数据分散 - 服务器本身距离网络跃点 一个随机的数据,就像客户端一样。
当然,对于像分析层这样知道 每个服务器包含哪些数据,运行分布式是有意义的 版本与 FDB 群集中的每台计算机位于同一位置。