我正在使用具有各种不同实体的数据库表。这意味着我不能在其中包含任意数量的字段来保存各种不同的实体。相反,我只想保存最重要的字段(日期、参考 ID - 各种其他表的外键类型、最重要的文本字段等)和一个附加的文本字段,我想在其中存储更完整的对象数据。
最明显的解决方案是使用XML
字符串并存储它们。第二个最明显的选择是JSON
,通常更短,并且序列化/反序列化可能也更快......而且可能也更快。但真的是这样吗?我的对象也不需要严格序列化,因为 JsonSerializer 通常能够序列化任何东西。即使是匿名对象,也可以在这里使用。
解决这个问题的最佳解决方案是什么?
附加信息
我的数据库是高度规范化的,我正在使用实体框架,但为了拥有外部超快速全文搜索功能,我牺牲了一点数据库非规范化。只是为了我在 MySql 上使用 SphinxSE 的信息。Sphinx 将返回行 ID,我将使用这些行 ID 快速查询我的索引优化综合表,以便从中获取最重要的数据,这比在我的数据库中查询多个表要快得多。
我的表将有如下列:
RowID
(自动递增)EntityID
(实际实体 - 但不直接相关,因为这必须指向不同的表)EntityType
(所以如果需要,我将能够获得实际的实体)DateAdded
(记录添加到此表时的时间戳)Title
Metadata
(与特定实体类型相关的序列化数据)
该表将使用 SPHINX 索引器进行索引。当我使用这个索引器搜索数据时,我会提供一系列EntityIDs
和一个限制日期。索引器必须返回一个非常有限的分页数量的RowIDs
按DateAdded
(降序)排序。然后我会将这些RowIDs
加入我的表格并获得相关结果。所以这实际上不是全文搜索,而是过滤搜索。以这种方式获取RowIDs
将非常快,并且从表中获取结果将比比较EntityIDs
和DateAdded
比较快得多,即使它们会被正确索引。