Java 开发 2.0: 使用 Hibernate Shards 进行切分
当关系数据库试图在一个单一表中存储数 TB 的数据时,总性能经常会降低。显然,对所有数据编索引不仅对于读而且对于写都很耗时。因为 NoSQL 数据商店尤其适合存储大型数据(如 Google 的 Bigtable),显然 NoSQL 是一种非关系数据库方法。对于倾向于使用 ACID-ity 和实体结构关系数据库的开发人员及需要这种结构的项目来说,切分是一个令人振奋的可选方法。
切分 是数据库分区的一个分支,但是它不是本地数据库技术 — 切分发生在应用程序级别。在各种切分实现中,Hibernate Shards 是 Java™ 技术世界中最受欢迎的一个。这个灵活绝妙的项目可以让您使用映射至逻辑数据库的 POJO 对切分数据集进行几乎无缝操作(我将在下文简要介绍 “几乎” 的原因)。使用 Hibernate Shards 时,您无须将您的 POJO 特别映射至切分 — 您可以像使用 Hibernate 方法对任何常见关系数据库进行映射时一样对其进行映射。Hibernate Shards 可以为您管理低级别的切分任务。
到目前为止,在本 系列 中,我已经使用了一个基于比赛和参赛者类推关系的简单域展示了各种数据库存储技术。本月,我将继续使用这个熟悉的示例介绍一种实用的切分技术,然后在 Hibernate Shards 中对其进行实现。注意:与切分相关的主要工作与 Hibernate 没有太大关系;事实上,Hibernate Shards 的编码工作比较简单。其中关键的部分在于判断 如何进行切分以及对什么进行切分。
Hibernate Shards 数据的水平、垂直切割(二)- Hibernate Shards基本演示 - riccc - 博客园
1. 通过id加载实体的时候,hibernate shards使用ShardSelectionStrategy来决定应当从哪个shard加载数据
2. 新增数据的时候,hibernate shards使用ShardResolutionStrategy来决定应当将数据insert到哪个shard中
这里为什么不能使用ShardSelectionStrategy呢?因为与id的生成机制相关,比如说可以让数据库来生成id(hibernate中的native方式),例如自增id,在shard的应用场景下可以简单的给每个shard一个起止范围,只是在insert数据的时候必须通过特定的算法决定将数据insert到哪个shard中,这样的情况下ShardSelectionStrategy是无法运用的。而对于assigned等类似的id生成机制,还是可以运用ShardSelectionStrategy策略的
3. 执行hql或者Criteria查询的时候,则使用ShardAccessStrategy从shard中查询数据
上面示例中的buildShardStrategyFactory方法中,我们使用了hibernate shards项目提供的SequentialShardAccessStrategy策略,这个策略在所有shards中逐个执行查询语句,然后对各个结果进行合并
数据挖掘和机器学习的区别_失败只有一种,就是半途而废!——追梦(huzhyi)_百度空间
数据挖掘和机器学习的区别和联系,周志华有一篇很好的论述《机器学习与数据挖掘》可以帮助大家理解。数据挖掘受到很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。简言之,对数据挖掘而言,数据库提供数据管理技术,机器学习和统计学提供数据分析技术。由于统计学往往醉心于理论的优美而忽视实际的效用,因此,统计学界提供的很多技术通常都要在机器学习界进一步研究,变成有效的机器学习算法之后才能再进入数据挖掘领域。从这个意义上说,统计学主要是通过机器学习来对数据挖掘发挥影响,而机器学习和数据库则是数据挖掘的两大支撑技术。从数据分析的角度来看,绝大多数数据挖掘技术都来自机器学习领域,但机器学习研究往往并不把海量数据作为处理对象,因此,数据挖掘要对算法进行改造,使得算法性能和空间占用达到实用的地步。同时,数据挖掘还有自身独特的内容,即关联分析。
而模式识别和机器学习的关系是什么呢,传统的模式识别的方法一般分为两种:统计方法和句法方法。句法分析一般是不可学习的,而统计分析则是发展了不少机器学习的方法。也就是说,机器学习同样是给模式识别提供了数据分析技术。
数据挖掘是从巨量数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程. 通俗地说,现在人们已经被海量数据所淹没了,而数据挖掘则是希望帮助人们从数据中发现有用的知识. 数据挖掘中用到了大量的机器学习界提供的数据分析技术和数据库界提供的数据管理技术. 从数据分析的角度来看,数据挖掘与机器学习有很多相似之处,但不同之处也是显著的,例如:数据挖掘并没有机器学习探索人的学习机制这一科学发现任务;数据挖掘中的数据分析是针对巨量数据进行的. 从某种意义上说,机器学习的科学成分更重一些,而数据挖掘的技术成分更重一些. 目前,数据挖掘已经在欧美等发达国家得到了很多应用(由于中国的信息电子化起步较晚,数据挖掘的应用还不太多),但这个领域中需要深入研究的问题仍然非常多. 数据挖掘也是 LAMDA 的核心研究领域.
学习能力是智能行为的一个非常重要的特征,不具有学习能力的系统很难称为一个真正的智能系统, 而机器学习则是希望使(计算机)系统能够利用经验来改善自身的性能,因此该领域一直是人工智能的核心研究领域之一。在计算机系统中,"经验"通常是以数据的形式存在的,因此机器学习不仅涉及到对人的认知学习过程的探索,还涉及到对数据的分析处理 。实际上,机器学习已经成为计算机数据分析技术的创新源头之一。由于几 乎所有的学科都要面对数据分析任务,因此机器学习已经开始影响到计算机科学的众多领域,甚至计算机科学之外的很多学科。从火星探测机器人、基因芯片到汽车自动驾驶、智能家电,机器学习都在背后发挥着重要的作用,但这个领域中需要深入研究的问题仍然非常多. 机器学习是 LAMDA 的核心研究领域。---源自LAMDA主页
数据挖掘与机器学习经典图书介绍:http://www.cc-edu.net/lanmu/JCJS/2008_09.pdf
对于“数据挖掘”,有多种文字不同但含义接近的定义,简单来说,可以归纳为“试图从海量数据中找出有用的知识”。在学术界,有时也将“数据挖掘(DM)”称为“数据库中的知识发现(KDD)”。而“机器学习”是人工智能的核心研究领域之一,目前被广泛采用的机器学习的定义是“利用经验来改善
计算机系统自身的性能”。
南京大学的周志华教授曾专门撰文论述了数据挖掘和机器学习以及数据库之间的关系,他提出:数据挖掘可以视为机器学习和数据库的交叉,主要利用机器学习界提供的技术来分析海量数据,利用数据库界提供的技术来管理海量数据。
组成数据挖掘的三大支柱包括统计学、机器学习和数据库领域内的研究成果,其他还包含了可视化、信息科学等内容。不同的教材从不同的方面结合其基础学科知识讲述数据挖掘技术,不同专业和技术背景的学生或数据挖掘研究人员和应用人员可以根据自身的专业方向选择不同的数据挖掘切入点。
另附周志华 《数据挖掘与机器学习》http://xinxi.xaufe.edu.cn/kejian/files/05033at2007121222135317664.pdf