现在的位置: 首页 > 综合 > 正文

一个大数据量问题的探索(关于分区表的应用)

2013年04月08日 ⁄ 综合 ⁄ 共 795字 ⁄ 字号 评论关闭

最近遇到一个数据量大引起的问题, 目前数据量大约8M条数据。以后还将以每天近万的数据增加。 因此考虑MsSqlServer的分区表特性。
原先的表设计相当于
表名为UserEvent
Id(bigint),UserId(nvarchar(250)), EventId(nvarchar(250)), column1, column2, column3.

此表相当于一张系统所有业务的索引表, 记录了某用户在此系统中所有的业务行为。
应用场合:
每当该用户在该系统中发生一笔业务, 将在该表中记录一笔数据。
查询页面: 用户将通过UserId或EventId, 但必须需要两者中的一个数据进行数据查询。

由于mssqlserver只支持一个列的分区表的策略, 但是目前的应用场景则必须需要有两列的信息(UserId, EventId), 所有从信息量上的考虑,
分区列也必须包含此两列的信息, 因此考虑增加一列:
Id(bigint),SequenceId(int), UserId(nvarchar(250)), EventId(nvarchar(250)), column1, column2, column3
但是问题随之而来, 用户可能只考虑输入UserId, 或者EventId。 这样的话导致定位分区表的信息量不够, 不能有效的利用分区表的特点。
问题总归没有答案多呵, 考虑对SequenceId编码。
暂定SequenceId为0~99的数字, 十位上的0~9表示EventId的一个编码, 个位上的0~9表示UserId的一个编码。这个编码可以通过HashCode得到后,
再去取得其的个位。 (至于这个编码, 要看应用场合的, 不然会达不到很好的散列效果的)

这样的话, 用户若只输入UserId(得到的编码为6), 则我们可以在查询条件中, 加入条件(sequenceId in (6,16,26, 36,46, 56,66,76,86,96))

有什么好的建议, 不吝赐教。

抱歉!评论已关闭.