有个同事问我:"你开发的分布式数据库系统, 如何避免 scan 扫描操作返回了 pending 事务状态的数据?"
我说:"把数据扫描出来, 然后逐个判断过滤掉 pending 状态的数据."
我感到奇怪, 对于他的问题, 解决方案非常显然啊. 解决方案非常直观, 兵来将挡水来土掩, 我相信他也能想到, 不想要的数据当然要剔除掉, 否则呢? 那么, 他的问题的点在哪?
没错, 他接着问了:"我 scan 的时候只想返回 key, 但是, 要判断状态, 是不是还得去读取 value 解析出状态信息?"
我当时是黑人问号脸:"当然要知道状态信息才能根据状态过滤呀, 不然呢?"
他终于祭出了那个经典的让人哭笑不得的问题:"读取 value, 是不是性能会下降啊?"