说道数据存储,就不得不提到mysql,但是当要存储的数据达到一定的数量级,比如说千万,mysql的性能就能明显的感觉到下降,针对这个情况,公认的方法一般都是归档啊分表啊这种,或者直接把数据库进行做分布式?
想把数据存储好,方便使用,比如,直接存取,插入,更新,搜索各种,可以使用这个方法:把key做hash,然后用hash获取到实际使用的表名,再对着这个表进行具体的操作。
当然这也有影响,比如我现在要统计全部数据中,具有某种属性的所有数据的某些信息,就要把所有的表都遍历一次。
不过相对来说,还是觉得这样操作会比较好,可以让控制住表的规模。
相关的,还有一个名词,叫一致性hash。
感觉增加节点的流程应该是这样的:
1.增加节点,并把数据复制进来
2.打开节点
3.把旧节点的数据做清理
最近又想了想,觉得这样会涉及一个数据迁移的问题,或者说,多次hash以后,如果不主动进行数据迁移的话,那么重新获得之前的数据在哪个节点是很难的。
这里我想到了分代的思想,既第一步用key算出这个key所属的代,然后在到这个代上进行hash获得这一代具体是哪个节点,然后再到对应的节点上取数据。