标签的高效数据结构?

Hom*_*mde 5 c# bitarray data-structures

想象一下,您希望尽可能高效地(以二进制形式)对stackoverflow帖子(包括其标签)进行序列化和反序列化,以及在执行标记查找时的性能.这种情况是否有良好的数据结构?

Stackoverflow有大约28532个不同的标签,您可以创建一个包含所有标签的表并为它们分配一个整数.此外,您可以按频率对它们进行排序,以便最常见的标签具有最低的数字.从搜索和存储的角度来看,仍然将它们简单地存储为"1 32 45"格式的字符串似乎有点无穷无尽

另一个想法是将标签保存为变量bitarray,从查找和序列化的角度来看这是很有吸引力的.由于最常见的标签是第一个,您可能会将标签放入少量内存中.

问题当然是不常见的标签会产生巨大的比特.对于0的大跨度,是否有"压缩"比特阵列的标准?或者应该完全使用其他结构?

编辑

我不是在寻找一个数据库解决方案或解决方案,我需要将整个表保留在内存中,而是一个用于过滤单个项目的结构

Bar*_*ter 2

您需要第二个包含 2 个字段的表:tag_id Question_id

就是这样。然后您在 tag_id、question_id 和 Question_id、tag_id 上创建索引 - 这将覆盖索引,因此您的所有查询都会非常快。