我必须开发一个CMS,将支持两种语言的英语,阿拉伯语。这个CMS将是一种文章发布网站。在设计和分析时,我发现有些文章的长度超过8000字。我的表中有一些列
PageID int,
PageTitleEnglish nvarchar(200),
PageTitleArabic nvarchar(200),
PageDescEnglish nvarchar(500),
PageDescArabic nvarchar(500),
PageBodyEnglish nvarchar(max)
PageBodyArabic nvarchar(max)
如果我将PageBody保持为nvarchar( 4000 ),那么我限制在4000个字符,如果我必须存储阿拉伯文本,那么我需要16000字节(因为阿拉伯语是Unicode,比ASCII占用3倍的空间)。
因此,我只剩下将PageBody定义为nVarchar(max)的选项,从性能的角度来看,这会有它的缺点。我的实际问题是,如果PageBody列中的某些数据小于4000个字符,那么它会不会是characters,而不是内联列或单独数据库中的数据。
我也在谷歌上寻找过这个问题,但没有找到任何相关的答案,也没有找到在这种情况下如何提高性能的方法。
欢迎对这种设计多语种CMS的最佳实践提出建议。
发布于 2011-12-30 10:50:51
如果nvarchar(max)
值足够短,它将被存储为"排在“。
默认行为可以使用服务提供商_表选项“大值类型出行”选项进行修改。我不会费心的。DB引擎将有效地管理这一点。
至于设计,有几种基于模型的方法:
也就是说,您可以将不同的语言拆分成不同的表。
这允许表级排序规则而不是列级排序规则。
它允许每页允许更多的行,并允许更多的机会在行LOB存储。
PageParent
PageEnglish (注: varchar在这里可能没问题)
PageArabic
或者有一个languageID列来支持几种语言。
这有一个缺点,即所有语言的排序规则都是固定的,这意味着排序/过滤很差。
PageParent
页面
发布于 2011-12-30 11:05:06
这意味着要把所有的东西都装进一行,所有尺寸的总和必须小于8K。如果没有,Server将将BLOB存储在行/页之外。
数据量大到真的会导致性能问题吗?
作为另一种选择,您也许可以更改数据库结构,以便为英文页和阿拉伯页分隔行,并包含一个语言代码列。这样就不必将英文文本和阿拉伯文本放在同一行中,这在获取数据时也是有意义的,因为您可能不需要同时获取英语和阿拉伯语。
https://dba.stackexchange.com/questions/9953
复制相似问题