我正在编写一个内部网应用程序,它的一个功能大致类似于内容投票 - 与SO,亚马逊和其他许多网站不同.
假设每个可投票的内容都有一个唯一的ID,并且每个用户(他们都经过身份验证)都有一个唯一的ID,最简单的方法似乎是拥有一个"投票"表...
ContentID int UserID int VoteValue int
但是每次投票会创造一排 - 拥有数百万条内容和数万名用户,这张桌子将会非常庞大.这是最好的方法吗?我的意思是,如果一个int需要4个字节,每行需要12个字节.如果一百万条内容得到一百票,那就是400MB +的存储空间,是吗?似乎......很多:).即使VoteValue是一个tinyint(可能很好)并且只有1个字节,表中仍然只有几百兆字节.我的意思是sheesh.
有更聪明的方法吗?我应该将这个"投票"表存储在一个单独的数据库中(忽略潜在的数据完整性问题),以便在存储和性能方面将其从"主"数据中划分出来吗?
(我确实意识到,在今天的世界中,400MB并不是一吨 - 但似乎只是为了存储选票,是吗?)
嗯,是的,但你需要看一下更大的图景.有一百万件内容:
(内容大小)>>(投票数):">>"表示"更大".
如果你有一百万条内容,那么这可能是一个太字节数据,其中投票数为400MB.大不了?
我还想补充一点,如果您担心可扩展性,请查看此博客:
http://highscalability.com/
就个人而言,只要你有良好的指数,你就会以正确的方式进行.根据您的使用情况,为了提高性能,您可以尝试通过存储辅助计数信息来避免点击投票表,但总体而言,如果您必须跟踪世界卫生组织投票的内容,则需要按照您列出的方式进行.
我不打算转移到另一个数据库,如果你真的担心SQL Server,你可以创建一个单独的文件组来保存它.....但很可能没有必要.