目录:无价之宝

    想想一个图书馆。把图书馆的地板、走廊和书架想象成存储信息的孤岛。有价值的信息被搁置一边,等待着我们去发现。人们不需要为了寻找特定的一本书而走遍图书馆大厅。相反地,人们会使用卡片分类目录,在主题、标题和作者上执行交叉索引来帮助查找相关的文档。目录、索引和分类目录基本上指的是相同的东西:都是用于定位其他东西。

    定位器的例子包括图书馆的卡片目录、电话号码目录和eBay等。对于每种定位器,目录相当于定位器服务:当对它们提供一个或者多个查询项时,这些定位器会返回引用信息(指针)。在图书馆,卡片分类目录是为了促进高效的企业搜索的一个特定目录,它为用户提供指向文档的特定的指针(如:使用Dewey十进制系统)。当提供给用户一个指针后,就变成“联合搜索”。注意(有用的)联合搜索和(无用的)联合搜索之间的区别。

    G公司的搜索也不是扫描整个地球来获取搜索结果;相反,它是搜索G公司创建的一个特定目录,然后把搜索结果指向真正文档的指针返回给查询者。

    企业范围的可发现性的唯一可扩展解决方案是使用目录。这并不奇怪。因此,一个特定的目录是最根本的部分,它允许“数据发现数据”系统有规模地处理可发现性和实时地确定相关性。

    不是所有的目录都是等同的。传统的“上下文无关”的目录和能够累计并持久的上下文的目录之间存在很大的区别。上下文相关的目录使得数据发现数据可以通过非常令人意外(不显著)的、实时、大量的方式,而且效率非常高效。

    上下文无关的目录是最常见的目录类型:每个文档的索引和所有其他文档不相关。换句话说,新的企业交易(文档)更新目录,并不关心该交易(索引的元数据)和其他交易之间的关系。上下文无关的目录是为了给用户提供最基本的定位文档的能力而设计的(如所有和“Billy the Kid”相关的书)。

    语义上一致[1]的目录是那些试着利用同义词的目录,使用不同的单词来表示相同的东西。这意味着用户想要寻找一个东西(如“Billy the Kid”)应该能够找到其他“相同”的东西(如“William Antrim”,他的一个别名)。当一个新报告的实体引用了之前观察到的实体,语义一致的目录能够做出识别。包含语义一致的数据的目录可以看成是图书馆的一个卡片文件,这有一个很大区别:和类似的实体相关的卡片被胶合在一起。这意味着如果一个搜索定位到了一张卡片,“作为奖励”,它不需要付出额外的努力就可以发现所有其他相关的卡片。最显著的是,在这些胶合在一起的图书馆卡片中,有些甚至不包含被搜索时的原始数据项。

    坦白地说,这一切看起来很神奇。当试着去发现该企业对于某个Email地址的了解程度时,查询者会发现和该Email地址相关的记录以及关于这个人在企业中的其他记录——举个例子,某个会员俱乐部,虽然实际上它的记录中从来都没有包含Email地址。语义上协调身份的算法(如人们或者组织)有时被认为是身份识别[2]。确定多个实体什么时候是相同的实体的算法需要非常深入细致的讨论,因而超出了本章讨论的范围。

    语义一致且“有关系意识”(rlationship-aware)的目录是提供了更高程度的上下文的一种目录类型,它通过允许用户发现额外文档,如那些和私人相关的关联(如Billy theKid就是William Antrim)。可能知道实际上确实有William Antrim可能也是很重要的,而且这个人碰巧是Billy the Kid的继父。对这些达到可视化的方式是在脑海里画一张图书馆卡片目录,其中一些卡片如前所述,已经通过胶带系在一起,还有一些线条连接到一些卡片捆绑(bndle)到其他卡片以及其他卡片捆绑。人们可以搜索任意术语的某个集合,并定位一个卡片捆绑,并且在那时弄清楚该捆绑是如何和其他捆绑关联(相关)的。有些关联的线条比其他线条粗,这表明它们关联关系更强。通过一条线找到另一个卡片捆绑,人们可以马上看到是什么线条连接到下一个捆绑。通过这种方式,人们可以观察到这些卡片捆绑分离的程度,如Kevin Bacon所提出的六度分割理论。

    当思考“数据发现数据”系统时,必须记住当有新的交易发生时,可能是把当前已经存在的实体增加到上下文中,那么就有可能会发生由于捆绑和线条的重新组织,新的信息改变了图片的大小。

    持久性上下文(Prsistent context)是个术语,用于表示一致的、“有关系意识”的当前状态。从本质上讲,它指的是不断变化和越来越复杂的当前状态。持久性上下文是保存了事物间相关性,优于在联合搜索系统中用到的“即时”性上下文(Jst-in-time context)。

    持久性上下文(语义上一致且“有关系意识”的路径)能够促使高性能的发现、流语境化以及实时检测相关性。同样值得注意的是,如果相关性检测可以在获取数据时发生,其计算代价是最低的。从这方面来看,图书管理员(负责把新数据补到目录中)是第一个发现新到来的数据和待发布的数据是否有足够的相关性。

    意识的溪流胜过沸腾的海洋。想象这一点的一种清晰的方式是想象一个企业组织有4 exabytes(1 exabytes=216字节)的历史数据,每分钟接收5TB的数据。你觉得他们是在周末启动一个进程,用来发现发生的事吗?在整个地球上,可能没有足够的计算机或者能源来做这件事。(注意:规模上设想的行为在设计非常高效的系统时,被证明是非常有效的。)

    [1]定义为“当两个东西描述上虽然不同,但实质相同,能够做出识别”。

    [2]不要把身份识别和类似的有时被称为匹配/归并或归并/清洗的一组方法混淆。更多关于它们之间的区别,可参考文章“Entity Resolution Systems vs.Match Merge/Merge Purge/List De-duplication Systems”(htp://jeffjonas.typepad.com/jeff_jonas/2007/09/entity-resoluti.html)。