生物学和计算机科学原本是八竿子打不着的学科,一个是研究细胞、基因的科学,一个是由0和1基础上构建的程序、算法的科学。
生物学是一个神秘的学科,很多的领域人类其实并没有完全的探索清楚。上帝用了几十亿年创造的东西,远比人类创造的不足百年的计算机精妙。所有,现在计算机技术中,很多设计、思想、算法都是来源于生物学的理论。
1、细胞分裂
细胞分裂(cell division)是活细胞繁殖其种类的过程,是一个细胞分裂为两个细胞的过程。
在HBASE的存储中,就用到了这种思想.
HBASE的底层存储的核心是StoreFile,当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。
2、神经网络
人的一次反射活动,主要经历了以下几个步骤,感受器->传入神经纤维->中枢->传出神经纤维->效应器
人们在模拟生物的神经网络结构,建立了人工的神经网络结构,如下图:
如果合并起来,就是这样的结构
在计算机领域,分布式流式计算的Storm的拓扑结构就和这个有点类型,大量数据的汇合,然后到达一定的阈值后,向下一个bolt发送任务,然后串联起一个汇集式的网络结构。
3、大脑存储
人的大脑究竟可以存储多少数据呢?当然现在谁也不知道,但也有人对此进行评估,比如《科学美国人》一篇文章估计有2.5PB,如果1台计算机5个TB,需要500台计算机才能存储下一个人大脑中的数据,感觉到上帝和人类的差距是多大了吧。
大脑的存储有几个特性:
1、存储的总空间是恒定的
2、聚集相似性存储器,比如“红色的消防车”和“红色的苹果”,会将“红色‘只作为单份的存储
3、有一定的错误的几率
当然,人类也在模拟人类大脑的存储,比如Pentti Kanerva在1974年提出了Sparse Distributed Memory(稀疏分布式存储),虽然它没有被很好的实践。
其他还有比较著名的Bloom Filter算法就基本使用了这种思想
定义n个hash函数,将一个字符串hash到一个bit串中,当然同一个位上可能会有重复。当去判断这个字符串是否存在的时候,重复这n个hash函数,可以判断这个字符串是否存在。
当然,会有一定的误差,这和我们的大脑经常记错一些事情类似。
后记
人类从鸟类得到灵感,造出了飞机,人类从鱼身上得到了灵感,造出了潜艇。其实,万物的根本都是一致的,思路和逻辑都可以借鉴。
写这篇文章的目的并不是简单介绍几种方法,而是希望大家把思路打开,不要局限于自己的领域,走出去,你的思路会更加的宽广。
资料:
人工神经网络:http://zh.wikipedia.org/zh-cn/人工神经网络
Bloom Filter算法:http://zh.wikipedia.org/wiki/布隆过滤器