存储大量Unicode文本的最佳方法是什么?

时间:2015-10-01 03:23:24

标签: c# sql-server unicode lucene

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

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

将按类别键使用关键字添加,检索和搜索这些条目。

我目前正在考虑以下两种方式:(其他想法超过欢迎)

文件

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

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

SQL Server

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

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

2 个答案:

答案 0 :(得分:2)

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

  1. 您是否会存储超过2 GB的数据? nvarchar(max)中的最大数据为2 GB。
  2. 您是否会使用sql server中的这些数据进行操作(全文搜索,分组等)?您无法通过文件中的数据加入或分组。
  3. 您需要交易操作吗?您可以添加文件,但无法将记录添加到DB和副版本。
  4. 因此,假设您对此问题有答案,您可以自行决定。 我的建议 - 将大数据存储在文件或其他blob存储(azure blob,amazone等)中,并有一个包含此文件列表的表。

    优点:

    1. 小型数据库大小 - 易于备份,易于恢复
    2. 快速查询文件列表表(计数,加入,分组等)
    3. 缺点:

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

答案 1 :(得分:0)

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

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