内核 space 或用户 space 中的 ODBC 驱动程序 运行?为什么?
ODBC drivers run in kernel space or user space? Why?
我现在正在研究数据库,我想知道 ODBC 驱动程序是否真的 运行 在内核 space 中。仅使用套接字进行客户端连接不是更容易吗?我能想到的唯一合理的解释是套接字的性能问题。还是有其他原因?
- ODBC 不是协议!这是一个 API。 ODBC 与如何与 DBMS 对话无关。它是关于如何与知道如何与 DBMS 交谈的事物交谈。那东西是一个C库。它被称为 "DBMS-specific library" 或 "ODBC-driver"。 ODBC 指定库必须具有哪些 C 函数(以及此函数的名称)才能用作 ODBC 驱动程序。 ODBC 驱动程序实现特定于 DBMS 的协议。它可以使用任何它想与 DBMS 对话的东西:套接字、管道、共享内存、鸽子等等
还有一个很有意思的东西叫"ODBC-ODBC bridge"。它允许您远程连接到 DBMS,而无需在本地安装特定于 DBMS 的库。类似于协议,不是吗?
- User-space 驱动程序很常见。因此,ODBC 库被称为 "drivers" 并不奇怪。在user-space中实现所有逻辑,使用kernel-space仅向设备发送数据非常方便。
我现在正在研究数据库,我想知道 ODBC 驱动程序是否真的 运行 在内核 space 中。仅使用套接字进行客户端连接不是更容易吗?我能想到的唯一合理的解释是套接字的性能问题。还是有其他原因?
- ODBC 不是协议!这是一个 API。 ODBC 与如何与 DBMS 对话无关。它是关于如何与知道如何与 DBMS 交谈的事物交谈。那东西是一个C库。它被称为 "DBMS-specific library" 或 "ODBC-driver"。 ODBC 指定库必须具有哪些 C 函数(以及此函数的名称)才能用作 ODBC 驱动程序。 ODBC 驱动程序实现特定于 DBMS 的协议。它可以使用任何它想与 DBMS 对话的东西:套接字、管道、共享内存、鸽子等等
还有一个很有意思的东西叫"ODBC-ODBC bridge"。它允许您远程连接到 DBMS,而无需在本地安装特定于 DBMS 的库。类似于协议,不是吗?
- User-space 驱动程序很常见。因此,ODBC 库被称为 "drivers" 并不奇怪。在user-space中实现所有逻辑,使用kernel-space仅向设备发送数据非常方便。