【问题标题】:What would be the optimal way to store large amounts of Unicode text?存储大量 Unicode 文本的最佳方式是什么?
【发布时间】:2015-10-01 03:23:24
【问题描述】:

我正在开发一个需要存储大约 15k Unicode 字符的项目。最好的存储方式是什么?

主应用程序使用 C# 编写,其他一些数据存储在 SQL Server DB 中。这种大量的文本需要以某种方式通过随机生成的条目键和类别键来识别。显然,可能/应该有多个条目具有相同的类别键。

这些条目将被添加、检索并使用关键字按类别键进行搜索。

我目前正在研究以下 2 种方式:(非常欢迎其他想法)


文件

每个类别键表示为一个文件夹,每个条目表示为一个文件,使用条目键作为文件名。

要进行搜索,我只需使用 Apache Lucene.Net 项目来构建索引并通过它进行搜索。


SQL 服务器

只是作为NVARCHAR(MAX) 类型的另一列存储在表中。


以下哪种方式最好?我正在寻找其他选项,以及这些选项的优缺点。

【问题讨论】:

    标签: c# sql-server unicode lucene


    【解决方案1】:

    要回答您的问题,您必须回答以下问题:

    1. 您会存储超过 2 GB 的数据吗? nvarchar(max) 中的最大数据为 2 GB。
    2. 您是否会在 sql server 中处理这些数据(全文搜索、分组等)?您不能按文件中的数据加入或分组。
    3. 您需要事务性操作吗?您可以添加文件,但无法将记录添加到数据库和副版本。

    因此,假设您对这些问题有答案,您就可以做出决定。 我的建议 - 将大数据存储在文件或其他 blob 存储(azure blob、amazone 等)中,并有一个包含这些文件列表的表。

    优点:

    1. 小型数据库 - 易于备份,易于恢复
    2. 对文件列表表的快速查询(计数、连接、分组等)

    缺点:

    1. 您需要保持数据库和文件存储同步
    2. 您有非事务性操作,但可以通过操作顺序忽略它:保存(或删除)文件,然后在数据库中进行更改。因此,如果您在 DB 上失败,只需从第一步开始操作即可。

    【讨论】:

    • 1.不,就像我在最初的问题中所说的那样,远不止于此。 2. 不需要。不需要以任何方式操纵此数据。它只需要在那里并且可以搜索。 3. 不,我不需要事务操作。如果插入时发生任何类型的故障,则根本不会创建文件。
    • 所以,目前文件的优点超过了数据库的优点。
    • @MDTech.us_MAN 小心,我的回答真的取决于我对情况的看法,我可能不知道你的所有要求。所以,也要三思而后行
    • 我一定会这样做的。
    【解决方案2】:

    将所有数据保存在一个数据存储中要容易得多。我会选择 SQL 服务器解决方案。

    但是,如果您主要关心存储空间并且文本主要是 ASCII,那么编码为 UTF-8 将节省约 50%。 SQL Server 不支持 UTF-8,只支持 UTF-16 (UCS-2)。所以保存一个单独的文件可能有好处。

    【讨论】:

    • 所有内容都需要保存为 Unicode。我想确保这部分不会成为支持的语言/字符方面的限制因素。
    • UTF-8 是一种无损编码。可以使用所有语言/字符。为了效率,它偏向于 ASCII。在 UTF-8 中,一个英文字符 (U+0000 - U+007F) 仅使用 1 个字节,而中文字符通常需要 3 个字节。在 UTF-16 中,英文和中文通常都需要 2 个字节。
    • 啊,我现在明白了。我误解了 UTF-8 的概念。这为我清除了它:stackoverflow.com/a/643706/1610754。总而言之,我目前倾向于文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多