|
|
1
2
过去(SQLServer2005和LINQ之前)在处理这种结构时(或者更一般的有向无环图的情况,通过连接表实现,以便项可以有多个“父级”),我要么将整个图加载到内存中,或者在数据库中创建一个跳跳虎更新的查找表,该表以祖先到后代的关系缓存。 两者都有优点,哪一个胜出取决于更新频率、父子关系之外对象的复杂性以及更新频率。一般来说,加载到内存允许更快的单个查找,但是对于大型图形,由于每个Web服务器中使用的内存量(这里是“每个”,因为webfarm的情况是将项目缓存在内存中会带来额外问题),它在本机上无法扩展,这意味着您必须非常小心如何处理问题保持同步以抵消这种影响。 现在可用的第三个选项是使用递归CTE执行祖先查找:
假设根类别由空parentID表示。 (我们使用UNION ALL,因为我们将在以后选择DISTINCT,这样我们就有了一个DISTINCT操作,而不是重复它)。 这使我们能够在没有非规范化表冗余的情况下执行查找表方法。效率折衷明显不同,通常比使用表的折衷要差,但不多(在选择时略有命中,在插入和删除时略有增加,可忽略的空间增加),但正确性的保证更大。
Pro查找表:
比较(两者)db-heavy选项和内存缓存。 内存中的Pro:
Pro查询数据库:
所有这些都不是100%确定地倾向于一个或另一个解决方案,我当然不会给出一个明确的答案,因为这样做是过早的优化。你能做什么 |
|
|
2
3
其基本思想是:除了
你在问题中没有具体说明
然后您可以使用以下方法获取与特定类别相关联的所有InformationClass:
|
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
|
Pavel Foltyn · 如何在C中生成逆字典# 1 年前 |
|
ewok · 基于种子和上一个值创建值列表 1 年前 |
|
|
Vasu V · 将foreach转换为select语句 1 年前 |
|
Modest · 使用命名空间和文本值序列化xElement 2 年前 |