在数据库中存储Dictionary

在我的代码中的某个时刻,我正在创建一个Dictionary类型的Dictionary我想知道在将它转换为字符串然后再返回字典方面,将它存储在数据库中的最佳方法是什么。

谢谢。

如果您确实希望将完整字典存储为单个字符串,则可以将字典序列化为JSON(或XML)并将结果存储到数据库中。

这里有很多选择。

  • 您可以进行规范化路由并使用具有键/值对列的单独表。

  • 某些数据库为您提供与您需要的数据类型类似的数据类型。 PostgreSQL有一个hstore类型,你可以保存任何键值对,MS SQL有一个XML数据类型,可以在插入之前使用一些简单的数据按摩。

  • 如果没有这种特定于数据库的帮助,您可以使用TEXT或BLOB列并使用DB友好格式(如JSON,XML或特定于语言的序列化格式)序列化您的字典。

权衡如下:

  • 具有键/值列的单独表格使得查询成本高昂,并且通常是PITA,但您可以获得最大的查询灵活性并且可以跨数据库移植。
  • 如果使用数据库驱动的字典类型,则可以获得查询支持(即“选择存储在字典中的属性与特定条件匹配的行”)。 如果没有这个,你可以选择所有内容并在程序中进行过滤,但是
  • 您丢失了数据库可移植性,除非您编写一个抽象出来的中间层,并且您在代码中丢失了数据操作的简易性(因为事情“工作”就好像数据库中有一个列有此数据)。

“ 面向文档 ”的NoSQL数据库完全意味着这种类型的存储。 根据您的工作,您可能希望查看一些选项。 MongoDB是一个受欢迎的选择。

正确的选择取决于数据的查询模式和其他非function性问题,如数据库支持等。如果扩展您需要实现的function,我可以扩展我的答案。

你有几个选择。 您可以将对象序列化为XML,或者将JSON序列化为@ M4N。 您还可以创建一个至少包含两列的表:一列用于键,一列用于值。

这实际上取决于您的域模型的外观以及您需要如何管理数据。 如果字典值或键改变(IE重命名,校正等),并且需要反映在依赖于数据的许多对象上,那么为该映射直接创建一种查找表可能是最好的。 否则,序列化数据将是性能最佳的选项之一。