我有以下问题:我有一个用于维护分层数据的表.我想在SQL 2005中使用CTE.
WITH tree (id, parentid, code, name) AS
(
SELECT id, ofs.ParentID, ofs.code, ofs.name
FROM OrganizationFeatures ofs
WHERE ofs.ParentID IS NULL
UNION ALL
SELECT ofs.id, ofs.ParentID, ofs.code, ofs.name
FROM OrganizationFeatures ofs
JOIN tree ON tree.ID = ofs.ParentID
)
select * from tree
Run Code Online (Sandbox Code Playgroud)
但我想按代码排序,结果如下:
1
1/1
1/1/1
1/1/2
1/2/1
1/2/2
2
4/1
Run Code Online (Sandbox Code Playgroud)
等任何想法?
sql-server sql-server-2005 hierarchical common-table-expression
我正在寻找高效的系统,以便分层组织一系列读/写锁,以管理对分层组织资源的访问.如果一个子树被锁定以进行写入,那么在它被释放之前,不应该在整个子树中获得其他锁定; 类似地,子树中的写锁定应该防止在父节点中锁定.
以下是我正在考虑的想法:
使用Apache Commons Transaction.不幸的是,该项目自2008年3月以来一直没有更新,并且已经非正式终止.一些API文档似乎表明即将推出的版本(1.3或2.0)将包含某种层次锁定,但源代码无处可寻,似乎我们无法再访问其SVN存储库.
使用一系列ReentrantReadWriteLocks,我将按层次结构组织.我不是并发专家,我有点害怕自己这样做.初步想法似乎表明,即使在我尝试锁定一个子树之前,我必须在管理ReentrantReadWriteLocks本身的整个结构上使用外锁- 这样即使释放一个锁,我也必须使用外锁...
使用来自java.util.concurrent和java.util.concurrent.atomic实现我的分层锁的类比我用一系列ReentrantReadWriteLocks 更有效.
我已经准备好走最后一条路,但我很惊讶没有找到任何可以更好地解决这个问题的现有图书馆.所以:
我想实现分层数据结构(例如Product - > Product 2 ----> Product3,Product 2 ----> Product4)使用实体框架6代码的第一种方法.有几种方法可用,但我认为封闭表方法可以满足我的所有要求.有人可以指导我如何有效地或任何其他替代方案在实体框架6中实施闭包表方法?
我必须为分层实体设计一个接口:
interface HierarchicalEntity<T extends HierarchicalEntity<T>> {
T getParent();
Stream<T> getAncestors();
}
Run Code Online (Sandbox Code Playgroud)
以前者将返回所有祖先的方式实现默认 getAncestors()方法非常容易.getParent()Stream
实施示例:
default Stream<T> getAncestors() {
Stream.Builder<T> parentsBuilder = Stream.builder();
T parent = getParent();
while (parent != null) {
parentsBuilder.add(parent);
parent = parent.getParent();
}
return parentsBuilder.build();
}
Run Code Online (Sandbox Code Playgroud)
但是我还需要包含this在流中,这里出现问题.以下行不正确,因为this它是类型HierarchicalEntity,而不是T:
parentsBuilder.add(this); // type mismatch!
Run Code Online (Sandbox Code Playgroud)
如何重新设计界面以使getAncestors()包含this到结果中?
在一个关于人类可读URL 的现在迁移的问题中,我允许自己详细描述我的一个爱好:
当我遇到像
http://www.example.com/product/123/subpage/456.html我这样的URL时,我总是认为这是尝试创建有意义的分层URL,但这并不是完全分层的.我的意思是,你应该能够一次切掉一个级别.在上面,URL有两个违反此原则的违规行为:
/product/123是一个表示为两个级别的信息.它会被更正确地表示为/product:123(或者你喜欢的任何分隔符)/subpage很可能本身并不是一个实体(即,你不能去了一个从水平456.html作为http://www.example.com/product/123/subpage是"无").因此,我发现以下更正确:
Run Code Online (Sandbox Code Playgroud)http://www.example.com/product:123/456.html在这里,您始终可以一次向上导航一个级别:
http://www.example.com/product:123/456.html- 子页面http://www.example.com/product:123- 产品页面http://www.example.com/- 根遵循相同的理念,以下内容将有意义[并提供产品列表的附加链接]:
Run Code Online (Sandbox Code Playgroud)http://www.example.com/products/123/456.html哪里:
http://www.example.com/products/123/456.html- 子页面http://www.example.com/products/123- 产品页面http://www.example.com/products- 产品清单http://www.example.com/- 根
我对这种方法的主要动机是,如果每个"路径元素"(由分隔符/)是自包含的1,您将始终能够通过简单地删除URL的最后一个元素来导航到"父".这是我(有时)在我想要转到父目录时在我的文件浏览器中执行的操作.遵循相同的逻辑线,用户(或搜索引擎/爬虫)也可以这样做.我觉得很聪明.
另一方面(这是问题的重要部分):虽然我永远无法防止用户试图访问他自己截断的URL,但我错误地断言(并且尊重)搜索引擎可能会做同样的事情?也就是说,期望没有搜索引擎(或者真的:Google)会尝试访问http://www.example.com/product/123/subpage(上面的第2点)是否合理?(或者我真的只考虑人为因素吗?)
这不是关于个人偏好的问题.这是关于我对爬虫/索引器的期望以及在设计URL时我应该考虑非人类URL操作的范围的技术问题.
此外,结构"深度" http://www.example.com/product/123/subpage/456.html是4,其中http://www.example.com/products/123/456.html只有3.有传言说这个深度影响搜索引擎排名.至少,所以我被告知.(现在很明显,搜索引擎优化并不是我最了解的.)这是(仍然?)真的:层次深度(目录数量)是否会影响搜索排名?
那么,我的"预感"在技术上是合理的还是我应该把时间花在其他事情上?
示例:这样做(差不多)正确的
好,所以这几乎是正确的.例证:个人资料,例如http://stackoverflow.com/users/52162:
http://stackoverflow.com/users/52162 - 单个档案 …我有以下问题:我正在尝试在现有的耳朵应用程序中实现Spring (使用Jboss作为App Server和Hibernate作为ORM).ear应用程序包括war(基本上很少有简单的servlet),har(hibernate archive只有数据模型 - 作为类和相应的hibernate映射文件 - 作为xmls),sar(只有一个解析类作为计划任务).所以,我很感兴趣如何在战争中共享har存档的最终appContext(因为servlet正在从数据库中检索数据)和sar(因为解析器正在"填充"数据库).关于这一点,既(战争和SAR)应使用单SessionFactory的豆这将在har的背景下定义.代码示例或代码段将受到高度赞赏.
我正在构建应该具有高写入负载的Web应用程序以及表示用户定义/构造树的数千甚至数百万个分层记录.我不是试图用线程构建论坛,而是用数千个小型层次结构构建庞大的数据库(树木最多有10-20个后代)......
我知道存储层次结构的许多模型 - 目前我使用的是嵌套集,但是具有大量数据和负载的性能是个问题.我也怀疑邻接列表或类似的东西可以解决这个问题.
我一直在试验Mongo数据库,它是超高速键/值存储但我只能使用MySQL.
我想听听其他人遇到类似问题的经历.
我正在开发一个具有层次结构的资产数据库.此外,还有一个"ReferenceAsset"表,可以有效地指回资产.参考资产基本上用作覆盖,但它被选择为好像它是一个独特的新资产.设置的覆盖之一是parent_id.
与选择层次结构相关的列:
资产:id(主要),parent_id
资产参考:id(主要),asset_id(foreignkey-> Asset),parent_id(始终为资产)
--- EDITED 5/27 ----
样本Relevent表数据(连接后):
Run Code Online (Sandbox Code Playgroud)id | asset_id | name | parent_id | milestone | type 3 3 suit null march shape 4 4 suit_banker 3 april texture 5 5 tie null march shape 6 6 tie_red 5 march texture 7 7 tie_diamond 5 june texture -5 6 tie_red 4 march texture
id <0(如最后一行)表示引用的资产.引用的资产有几个被覆盖的列(在这种情况下,只有parent_id很重要).
期望是如果我从四月选择所有资产,我应该进行二次选择以获得匹配查询的整个树分支:
所以最初查询匹配会导致:
Run Code Online (Sandbox Code Playgroud)4 4 suit_banker 3 april texture
然后在CTE之后,我们得到完整的层次结构,我们的结果应该是这个(到目前为止这是有效的)
Run Code Online (Sandbox Code Playgroud)3 3 suit null march shape 4 4 suit_banker 3 april texture …
在哪里可以找到一个完整的示例,显示分层分面搜索如何从索引文档到检索搜索结果?
Stackoverflow有一些帖子,但它们都只涉及分层分面搜索的某些方面; 因此,我不认为它们是重复的.我正在寻找一个完整的例子来理解它.我一直错过聚合工作的最后一个查询.
Solr网页上有文档,但不理解那里给出的示例.
我想在这里创建一个完整的演练示例,并希望您能提供缺失的最终作品.
输入
假设我们有3个文档,每个文档都是一个人.
Alice (document 1)
- Blond
- Europe
Jane (document 2)
- Brown
- Europe/Norway
Bob (document 3)
- Brown
- Europe/Norway
- Europe/Sweden
Run Code Online (Sandbox Code Playgroud)
产量
此(当前错误)查询的预期输出
http://server:8983/solr/my_core/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=tags_ss
Run Code Online (Sandbox Code Playgroud)
应该
Hair_color (3)
- blond (1)
- brown (1)
- black (1)
Location (3)
- Europe (4) // This should be 4 not 3, i.e. the sum of the leaves, because Alice is tagged with "Europe" only, without …Run Code Online (Sandbox Code Playgroud) 我有一个嵌套结构,如下所示:
List<Areas>
|-- List<Topics>
| |-- List<Exercises>
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序的工作流程:
API并显示列表AreasArea并转到下一个屏幕API并显示主题列表Topic并转到下一个屏幕API并显示练习列表我开始使用BloC,但我不确定是否应该对每种类型的数据使用一个 Bloc(因此一个 bloc for Areas,另一个 for Topics,另一个 for Exercises)或仅在一个 Bloc 中处理整个结构。
我看到一个问题,其中State包含整个结构,并且每次从 中获取嵌套列表时都需要更新API。也许这会导致内存问题?
另一方面,每种数据类型都有一个 Bloc 将使它们之间的通信变得复杂。
state management如果更有意义的话,我也愿意改用另一种技术。
任何帮助,将不胜感激。
多谢。