Coldfusion 如何从临时表的服务器连接处理红移会话
我正在使用ColdFusion连接到一个RedShift数据库,我正在尝试了解如何测试/假设自己的连接如何与RedShift中的临时表相关Coldfusion 如何从临时表的服务器连接处理红移会话,coldfusion,amazon-redshift,Coldfusion,Amazon Redshift,我正在使用ColdFusion连接到一个RedShift数据库,我正在尝试了解如何测试/假设自己的连接如何与RedShift中的临时表相关 在数据源的CFADMIN中,我已取消选中在客户端请求之间维护连接。我会假设每个使用我网站的用户都有自己的数据库“连接”?对吗 根据关于临时表的红移文档: TEMP:创建仅在当前会话中可见的临时表的关键字。在创建该表的会话结束时,会自动删除该表。临时表可以与永久表同名。临时表是在单独的、特定于会话的模式中创建的。(不能为此架构指定名称。)此临时架构将成为搜索路
在客户端请求之间维护连接。我会假设每个使用我网站的用户都有自己的数据库“连接”?对吗
drop if exists tablea
create temp table tablea
insert into tablea
select * from realtable inner join
drop tablea
多个用户正在使用相同的功能来实现这一点。他们不应该遇到任何冲突,其中一个表在另一个请求试图正确使用时被删除
我有一个类似的情况,但与红砖数据库软件。我通过创建唯一的表名来处理它。总的想法是:
<cfset tablename = TableText & randrange(1, 100000)>
这就是为什么我使用唯一的表名。但是我不缓存查询。具有讽刺意味的是,我使用临时表的最常见动机是,在某些情况下,它们会使事情比使用永久表运行得更快。当我查询
stv_会话时,我可以看到我的用户名有多个会话。
免责声明,我不熟悉红移,但您描述的是如何(非全局)临时表在数据库中的行为类似于SQL Server。同一个“用户”可以创建多个会话,但在一个会话中创建的临时表对其他会话不可见。不确定这是否有帮助,但[此线程提到检查STV_TBL_PERM](BNohttp://stackoverflow.com/questions/24561837/conditionally-drop-temporary-table-in-redshift).您知道从服务器到数据库的连接吗。我提到的CF中的设置似乎表明每个客户机请求(不确定该定义是什么)都有一个唯一的连接,因此是唯一的会话,对吗?正确。当“维护连接”被禁用时,每个请求都应该创建一个新的连接,该连接构成一个单独的db“会话”。如果这是真的,那么我假设一个会话处于活动状态,CF将保持打开状态,直到特定用户的超时。因此,usera
登录到我的应用程序并积极使用它一个小时。他们本可以进行一次为期一小时的会议userb
登录到我的应用程序,每25分钟只做一次。因为我的数据源连接超时是20分钟,所以每次都有不同的DB会话。redbrick不支持真正的临时表吗?(我从来没有用过)这里解释了红砖术语临时表它是创建它的SQL会话所独有的
我对会话wrt CF的解释是它是CF服务器和redbrick数据库之间的连接。我还假设一个打开的连接可以用于多个页面请求,我也考虑过使用唯一的表名。但问题是。为了提高性能,我将整个查询缓存30分钟。如果每个函数调用的名称都是唯一的,那么查询也是唯一的,这样的缓存就不起作用了。我想我可能会做一个cachePut
这样做,但是添加cachedWithin
效果更好,因为查询中还有其他参数可以更改,cachedWithin
会考虑到这一点,丹-谢谢。这听起来类似于SQL Server中的(非全局)临时表处理。就连接而言,如果使用连接池,它们可能会被多个请求重用。否则,每个请求都应该创建一个单独的连接或db“会话”。尽管我从未见过文档记录,但一个请求通常为整个请求维护相同的连接或“会话”。换句话说,如果您请求一个运行五(5)个查询的页面,CF应该为所有五个查询使用相同的连接,而不是为每个查询创建单独的连接。(编辑)Dan-我认为您误解了临时表和数据库会话的工作原理。启用“维护连接”时,应该会出现错误。使用连接池时,将重用现有的数据库连接。这意味着多个请求可以共享同一个db会话。因此,从一个请求到下一个请求,临时表可能是可见的,这就是您在上面看到的。但是,当禁用池时,每个连接都会创建一个新的db会话,并且创建的任何临时表在一个请求到下一个请求之间都不可见。
<cfquery datasource="dw">
create temporary table dan (f1 int)
</cfquery>
Error Executing Database Query.
** ERROR ** (7501) Name defined by CREATE TEMPORARY TABLE already exists.