Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Datomic是怎样的';为sql连接实现的长期数据库连接?_Database_Jdbc_Datomic_Jdbc Pool - Fatal编程技术网

Database Datomic是怎样的';为sql连接实现的长期数据库连接?

Database Datomic是怎样的';为sql连接实现的长期数据库连接?,database,jdbc,datomic,jdbc-pool,Database,Jdbc,Datomic,Jdbc Pool,根据: Datomic连接不遵循获取/使用/释放模式。 它们是线程安全的、缓存的和长寿命的。许多过程(例如。 应用程序服务器)将永远不会调用release 我很想知道这在实践中是如何实现的,特别是对于sql连接。从客户机/用户的角度来看,这很好,因为您根本不需要担心简化客户机代码的线程池,也不需要考虑需要进行哪些显著的推理。这是我想在其他使用SQL连接的应用程序中复制的东西 将问题分为几个小部分: 当将Datomic连接视为长寿命连接时,需要考虑哪些挑战 这种方法通常适用于处理JDBC连接,还

根据:

Datomic连接不遵循获取/使用/释放模式。 它们是线程安全的、缓存的和长寿命的。许多过程(例如。 应用程序服务器)将永远不会调用release

我很想知道这在实践中是如何实现的,特别是对于sql连接。从客户机/用户的角度来看,这很好,因为您根本不需要担心简化客户机代码的线程池,也不需要考虑需要进行哪些显著的推理。这是我想在其他使用SQL连接的应用程序中复制的东西

将问题分为几个小部分:

  • 当将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等的列表),并被发送到事务处理程序的队列中并按顺序处理。然后,事务处理程序在需要时直接连接到存储,但这显然是一个单独的问题,不会以任何方式影响对等方


      我希望这是澄清:)

      我首先要调查的是,为什么在许多进程。。。永远不会调用连接释放…我要调查的第一个问题是,为什么在许多进程。。。将永远不会调用连接的释放。。。