- 已编辑
dapengde 我看了HarryZhu-7harryprince 的两条回复之后,我觉得讨论 BT 首先要定义好什么是 Base R(B) 什么是 Tidyverse(T)?只有把这个定义好了才有后续的比较。我不想引发一些不必要的争论,我认为<https://github.com/tidyverse/> 和 <https://github.com/r-dbi> 是不同层面的两个东西,前者是 tidyverse 后者是和 tidyverse 无关的 R与数据库的接口集合。至于接口之上,用户层面写 SQL 语句(Base R 风格)还是写 tidyverse 风格的数据操作都无所谓,分布式,集群这些,甚至实时、高并发这些都不是 R 社区做的,是你说的Hadoop Spark PostGIS Redis Nginx 等数据处理、缓存、代理引擎做的, geospark, RPostGIS 都是其上的接口,这些接口需要解决如何与 Spark PostGIS 等的引擎交互,因为你想啊,传个 SQL 语句用的着 Nignx 代理 Redis 缓存 Hadoop 存储 Spark 处理吗?是用户请求和 SQL 语句的执行才需要。
我对 ClickHouse 略有了解,它提供了 JDBC 和 ODBC 两种驱动,所以如果是传递 SQL, 那么简单的就只需要根据 DBI 包,将其抽象封装的接口实例化即可,这样就实现了 clickhouse-r,如果需要 tidyverse 风的数据操作,就需要进一步翻译 SQL 为 dplyr 式的操作,这个翻译的过程需要写 C++/C 代码(走 ODBC 驱动)或者 Java 代码(走 JDBC 驱动)。
应该把 geospark sparklyr 看成一个前端,定义 dplyr 风格的操作,如果是直接基于 dplyr 就像你说的容易内存泄漏,这是显然的,因为一般人根本不知道它内部是什么? 我也不知道,所以我很菜,当年在渣浪用的是 DBI 连接 ClickHouse 分布式集群,传递 SQL,报错了比较好调。
这是我以前整理的一堆临时笔记,仅供参考 <https://bookdown.org/xiangyun/RGraphics/dm-import-export.html#import-data-from-database>