Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中存储序列化对象而不是多个xml文本文件是一个好主意吗?_C#_Database Design - Fatal编程技术网

C# 在数据库中存储序列化对象而不是多个xml文本文件是一个好主意吗?

C# 在数据库中存储序列化对象而不是多个xml文本文件是一个好主意吗?,c#,database-design,C#,Database Design,我目前正在开发一个web应用程序,该应用程序需要持久化用户的某些请求。我有三个选择: 序列化每个请求对象并将其存储为xml文本文件 序列化请求对象并使用CLOB将此xml文本存储在数据库中 将请求存储在数据库中的单独表中 在我看来,我会选择选项2(将序列化对象的xml文本存储在数据库中)。我之所以这样做,是因为从一列中读取对象,然后反序列化对象以对其进行处理要容易得多。我正在使用c#和asp.NETMVC来编写这个应用程序。我对软件开发相当陌生,希望能得到任何帮助 这个问题的答案实际上取决于细节

我目前正在开发一个web应用程序,该应用程序需要持久化用户的某些请求。我有三个选择:

  • 序列化每个请求对象并将其存储为xml文本文件
  • 序列化请求对象并使用CLOB将此xml文本存储在数据库中
  • 将请求存储在数据库中的单独表中

  • 在我看来,我会选择选项2(将序列化对象的xml文本存储在数据库中)。我之所以这样做,是因为从一列中读取对象,然后反序列化对象以对其进行处理要容易得多。我正在使用c#和asp.NETMVC来编写这个应用程序。我对软件开发相当陌生,希望能得到任何帮助

    这个问题的答案实际上取决于细节。存储的是什么类型的数据?您需要如何查询它?您需要多久查询一次

    一般来说,我会说同时做1和2不是一个好主意。选项2的问题在于,查询特定字段会困难得多。如果您要执行一个LIKE查询,并让它搜索一个很长的字符串,那么这将是一个昂贵的操作,并且您可能会在以后遇到性能问题


    如果您真的不想编写代码来读取多列来加载数据,那么可以考虑使用像LINQtoSQL这样的ORM。这将有助于您将数据库表加载到对象中。

    如果此类对象的数量很大而大小不是很大。我认为使用数据库是一个好主意

    将其存储在单独的表中还是存储在原始表中取决于如何将此CLOB数据与原始表一起使用。 如果在访问原始表时始终需要CLOB数据,请使用选项2。
    否则,请选择选项3以提高性能。

    您还需要考虑安全性和n层体系结构。将序列化数据存储在数据库中意味着您的数据将位于另一台服务器上,如果数据需要安全,这是一种理想选择,但alos会给您带来网络延迟,而将数据存储在文件系统中会使您获得更快的IO访问,但搜索能力非常有限


    我有一个这样的位置,我使用数据库。它还可以与其他相关数据正确备份。

    简短回答:如果选项2很适合您的需要,请使用它。将数据存储在数据库中没有错。

    我设计了许多系统,在这些系统中,将“某些”对象作为序列化xml存储在数据库中被证明是更好的选择。我还学到了将对象以xml的形式存储在数据库中的经验,这最终会带来更多的麻烦。因此,我提出了一些问题,您必须回答“是”,以便在工作中感到舒适:

  • 对象是否需要可移植
  • 对象中的数据是封装的,即不是其他内容的一部分,也不是由其他内容组成
  • 未来,数字2能改变吗
  • 在SQL中,您始终可以使用XQuery创建表视图,但我建议您仅在a)改变主意为时已晚b)您没有那么多要管理的对象时才这样做

    在XML中序列化和存储对象有一些真正的好处,特别是对于可扩展性和敏捷开发