Database Datomic是怎样的';为sql连接实现的长期数据库连接?
根据: Datomic连接不遵循获取/使用/释放模式。 它们是线程安全的、缓存的和长寿命的。许多过程(例如。 应用程序服务器)将永远不会调用release 我很想知道这在实践中是如何实现的,特别是对于sql连接。从客户机/用户的角度来看,这很好,因为您根本不需要担心简化客户机代码的线程池,也不需要考虑需要进行哪些显著的推理。这是我想在其他使用SQL连接的应用程序中复制的东西 将问题分为几个小部分:Database Datomic是怎样的';为sql连接实现的长期数据库连接?,database,jdbc,datomic,jdbc-pool,Database,Jdbc,Datomic,Jdbc Pool,根据: Datomic连接不遵循获取/使用/释放模式。 它们是线程安全的、缓存的和长寿命的。许多过程(例如。 应用程序服务器)将永远不会调用release 我很想知道这在实践中是如何实现的,特别是对于sql连接。从客户机/用户的角度来看,这很好,因为您根本不需要担心简化客户机代码的线程池,也不需要考虑需要进行哪些显著的推理。这是我想在其他使用SQL连接的应用程序中复制的东西 将问题分为几个小部分: 当将Datomic连接视为长寿命连接时,需要考虑哪些挑战 这种方法通常适用于处理JDBC连接,还
- 当将Datomic连接视为长寿命连接时,需要考虑哪些挑战
- 这种方法通常适用于处理JDBC连接,还是只适用于一个子类问题(包括Datomic问题)
- 我可以看出Tomcat的JDBC连接池是在幕后使用的,从Datomic连接的角度来看,这个池是如何用来实现长寿命连接的
- 在实践中,何时在后台使用单独的JDBC连接,例如,在读和写时是否使用单独的连接
- “视情况而定”:
例如,如果您设置了memcached,那么Datomic对等机可能根本不需要与sql数据库通信。Datomic使用sql获取编码数据块,而不是进行结构化查询,因此,如果memcached中存在块,则不需要sql。此外,对等方将收到事务处理程序发送给它的新数据块,因此如果您特别幸运,在运行第一个查询之前,对等方中的所有内容都已可用
如果块不在对等方中,并且不在memcached中,则对等方需要连接到sql数据库获取块。但这一切都是在幕后发生的,正如您所提到的,由tomcat连接池管理。一般来说,这个想法是,为了让查询成功运行,索引必须从存储中提取任何缺失的块(memcached、sql等等),这是一种惰性的方式。但是datomic连接本身“永远存在”,也就是说,这都是为您管理的,您不必根据您的对等方拥有的流量等创建N个连接
至于写操作,这些操作通过事务处理程序进行,不直接连接到存储。写操作被表示为我们都熟悉的EDN数据结构(带有db/add等的列表),并被发送到事务处理程序的队列中并按顺序处理。然后,事务处理程序在需要时直接连接到存储,但这显然是一个单独的问题,不会以任何方式影响对等方
我希望这是澄清:)“视情况而定”:
例如,如果您设置了memcached,那么Datomic对等机可能根本不需要与sql数据库通信。Datomic使用sql获取编码数据块,而不是进行结构化查询,因此,如果memcached中存在块,则不需要sql。此外,对等方将收到事务处理程序发送给它的新数据块,因此如果您特别幸运,在运行第一个查询之前,对等方中的所有内容都已可用
如果块不在对等方中,并且不在memcached中,则对等方需要连接到sql数据库获取块。但这一切都是在幕后发生的,正如您所提到的,由tomcat连接池管理。一般来说,这个想法是,为了让查询成功运行,索引必须从存储中提取任何缺失的块(memcached、sql等等),这是一种惰性的方式。但是datomic连接本身“永远存在”,也就是说,这都是为您管理的,您不必根据您的对等方拥有的流量等创建N个连接
至于写操作,这些操作通过事务处理程序进行,不直接连接到存储。写操作被表示为我们都熟悉的EDN数据结构(带有db/add等的列表),并被发送到事务处理程序的队列中并按顺序处理。然后,事务处理程序在需要时直接连接到存储,但这显然是一个单独的问题,不会以任何方式影响对等方
我希望这是澄清:)我首先要调查的是,为什么在许多进程。。。永远不会调用连接释放…我要调查的第一个问题是,为什么在许多进程。。。将永远不会调用连接的释放。。。