基于Java的时间映射/缓存与过期的密钥(Java time-based map/cache with expiring keys [closed])
你们中有谁知道Java Map或类似的标准数据存储,在给定的超时后自动清除条目? 这意味着老化,旧的过期条目“老化”自动。
最好在通过Maven访问的开源库中?
我知道自己实现功能的方法,并且在过去已经做了好几次,所以我不是在这方面要求建议,而是指向一个很好的参考实现。
WeakHashMap等基于WeakReference的解决方案不是一个选择,因为我的密钥很可能是非内部的字符串,我想要一个不依赖于垃圾收集器的可配置超时。
Ehcache也是一个我不想依赖的选项,因为它需要外部配置文件。 我正在寻找一个代码解决方案。
Do any of you know of a Java Map or similar standard data store that automatically purges entries after a given timeout? This means aging, where the old expired entries “age-out” automatically.
Preferably in an open source library that is accessible via Maven?
I know of ways to implement the functionality myself and have done it several times in the past, so I'm not asking for advice in that respect, but for pointers to a good reference implementation.
WeakReference based solutions like WeakHashMap are not an option, because my keys are likely to be non-interned strings and I want a configurable timeout that's not dependent on the garbage collector.
Ehcache is also an option I wouldn't like to rely on because it needs external configuration files. I am looking for a code-only solution.
原文:https://stackoverflow.com/questions/3802370
最满意答案
其实你很接近你的目标,你只需要使用nodes()方法来分割你的行,然后获取值:
select s.SqmId, m.c.value('@id', 'varchar(max)') as id, m.c.value('@type', 'varchar(max)') as type, m.c.value('@unit', 'varchar(max)') as unit, m.c.value('@sum', 'varchar(max)') as [sum], m.c.value('@count', 'varchar(max)') as [count], m.c.value('@minValue', 'varchar(max)') as minValue, m.c.value('@maxValue', 'varchar(max)') as maxValue, m.c.value('.', 'nvarchar(max)') as Value, m.c.value('(text())[1]', 'nvarchar(max)') as Value2 from sqm as s outer apply s.data.nodes('Sqm/Metrics/Metric') as m(c)
sql小提琴演示
Actually you're close to your goal, you just need to use nodes() method to split your rows and then get values:
select s.SqmId, m.c.value('@id', 'varchar(max)') as id, m.c.value('@type', 'varchar(max)') as type, m.c.value('@unit', 'varchar(max)') as unit, m.c.value('@sum', 'varchar(max)') as [sum], m.c.value('@count', 'varchar(max)') as [count], m.c.value('@minValue', 'varchar(max)') as minValue, m.c.value('@maxValue', 'varchar(max)') as maxValue, m.c.value('.', 'nvarchar(max)') as Value, m.c.value('(text())[1]', 'nvarchar(max)') as Value2 from sqm as s outer apply s.data.nodes('Sqm/Metrics/Metric') as m(c)
相关问答
更多-
;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd') select T.C.value('data(.)', 'nvarchar(128)') from [YOUR_TABLE] as Y outer apply Y.[YOUR_XML_COLUMN].nodes('/CustomFields/Field[@fieldName="CwTicketId"]') as ...
-
鉴于XML字段名为“xmlField”... SELECT [xmlField].value('(/person//firstName/node())[1]', 'nvarchar(max)') as FirstName, [xmlField].value('(/person//lastName/node())[1]', 'nvarchar(max)') as LastName FROM [myTable] Given that the XML field is named 'xmlField'... ...
-
如何从SQL Server中的表查询Xml值和属性?(How to query for Xml values and attributes from table in SQL Server?)[2022-05-23]
其实你很接近你的目标,你只需要使用nodes()方法来分割你的行,然后获取值: select s.SqmId, m.c.value('@id', 'varchar(max)') as id, m.c.value('@type', 'varchar(max)') as type, m.c.value('@unit', 'varchar(max)') as unit, m.c.value('@sum', 'varchar(max)') as [sum], m.c. ... -
这绝对是一个黑客,但...... DECLARE @s VARCHAR(MAX) SET @s = 'SELECT (SELECT 1 as splat FOR XML PATH) a' CREATE TABLE #save (x XML) INSERT INTO #save ( x ) EXEC (@s) SELECT * FROM #save s DROP TABLE #save This is most definitely a hack, but... DECLARE ...
-
你的XML声明了一个默认的命名空间,但你的SELECT不使用它: DECLARE @XMLNFE VARCHAR(MAX)= '
00000003 ... -
那么这就是表格的XML列中的整个XML? 在这种情况下,请使用如下所示的内容: SELECT (list of other columns), XmlColumn.value('(/Document/@ID)[1]', 'int') AS 'DocumentID' FROM dbo.YourTable .value()调用基本上将XPath作为其第一个参数,并将T-SQL类型作为其第二个参数,并将该XML值作为给定的T-SQL数据类型返回给您的查询。 So that's the whol ...
-
清理你的输入,然后转换为XML并一如既往地使用。 SELECT CAST( REPLACE( REPLACE('
585937500 \r\n' ,'\"', '"') ,'\r\n', '') AS XML) Clean your input like and then convert to XML and use as always. SELECT ... -
在不指定列名的情况下执行此操作有点棘手,但可行。 要使用它,您需要将@T替换为表名,并将表名常量'StateProvince'更改为表名。 declare @T table ( StateProvinceID int, StateProvinceCode char(2), CountryRegionCode char(2), IsOnlyStateProvinceFlag int, Name varchar(50), TerritoryID int, rowguid unique ...
-
您的查询中有两个错误 在nodes函数中使用xmlinput列名而不是rawxml 删除第一个/ in值函数 询问 SELECT t.id, x.XmlCol.value('(innernode/info)[1]', 'VARCHAR(100)') AS dt FROM [testxml] AS t CROSS APPLY t.xmlinput.nodes('/root') AS x(XmlCol) There are two mistakes in your query ...
-
对于许多帐户,请尝试使用嵌套的分层XML 首先,我声明一些表变量来模拟测试场景。 我假设,有一个帐户的父表: DECLARE @dummyAccount TABLE(lAccountID INT IDENTITY,SomeData VARCHAR(100)); DECLARE @dummyAccountDetail TABLE(lAccountDetail INT IDENTITY,lAccountID INT,sName VARCHAR(100),sAge INT);--do not store the ...