本文共 1247 字,大约阅读时间需要 4 分钟。
本文节选自电子书《Netkiller Architect 手札》,延伸阅读《Netkiller Blockchain 手札》
最近我区块链技术非常火,区块链优势是去中心化,数据不可撰改,但你仔细想想自己需求,真的需要区块链吗?还是需要区块链上的一些特性?例如数据不可撰改。
区块链并非能解决所有问题,虽然他也算是一种数据库,它能解决问题十分有限,它的数据管理和查询能力还打不到 NoSQL 的水平,更别提 SQL 的复杂应用。所以在实际的应用中,区块链不能替代数据,只能互补。
那么,我仅仅需要区块链的一个特性例如:“数据不可撰改”。
数据不可撰改包含几种情况:
如果数据被撰改,需能够侦测出,并展示数据
怎样实现这个需求呢?
背景:例如我们需要一个排行榜,存储活动的报名顺序或者考试成绩。我们防止有人作弊或者撰改,包括DBA在内。
任务:1.数据检查,2.发现撰改,2.风险提示
方案:使用链表指针方案,将数据看成一个链条,中间任何改动,就如同链条被剪断,改动之处之后的数据全部视为无效。
结果:达到数据后发现是否撰改,提示风险目的
CREATE TABLE `top100_list` ( `id` INT, `name` VARBINARY(16) NOT NULL, ...... ...... `extend` VARCHAR(32) NULL)ENGINE=InnoDB;
演示数据
id | extend | ...1 | 0 | ...2 | 1 | ...3 | 2 | ...4 | 3 | ... 5 | 4 | ...
extend 始终集成上一条记录,保证数据是连续的。但这样还不够,这样只能防止数据被删除,如果其他字段被修改呢
id | extend | ...1 | NULL | ...2 | crc32(...) | ...3 | crc32(...) | ...4 | crc32(...) | ... 5 | crc32(...) | ...
我们使用crc算法运算上一条一整行的数据,你还可以使用 salt 技术干扰,这个 salt 只有软件部署者知道,DBA和开发人员不得而知。
对于一般数据crc32 可能做到性能和安全性平衡,如果安全要求更高可以使用 sha256 等等,甚至采用 RSA 非对称秘钥。
原文发布时间为:2018-03-06 本文作者:netkiller 本文来源:,如需转载请联系原作者。