数据立方体是复杂计算的抽象。Datacube 是用 Java 实现的,可插入数据库后端支持的数据立方体。
datacube 是用来存储大数据点的聚合信息。数据立方体存储的是有趣输入数据点的子集。比如,你正在编写一个 web 服务器日志分析工具,你的输入点可能是日志行,你可能会计算每个浏览器的类型,每个浏览器的版本,操作系统类型,操作系统版本和其他属性。同时你可能会需要计算一个特定的组合计数(浏览器类型,浏览器版本,操作系统类型), (浏览器类型,浏览器版本,操作系统类型,操作系统版本),等等。
这对快速添加和修改计数是个很大的挑战,会浪费很多时间在数据库代码和重新用新计数器处理旧数据。而数据立方体就可以帮忙解决这些问题。
Urban Airship 使用 datacube 项目来支持他们的移动端应用的分析栈,每个节点每秒处理大约 10 K 的事件。
datacube 要求 JDK 1.6。
性能: 高速异步 IO 后端处理
使用 Hadoop MapReduce 进行批量加载
可插入数据库接口
datacube 暂时只支持 HBase 数据库后端。
示例:
IdService idService = new CachingIdService(5, new MapIdService()); ConcurrentMap<BoxedByteArray,byte[]> backingMap = new ConcurrentHashMap<BoxedByteArray, byte[]>(); DbHarness<LongOp> dbHarness = new MapDbHarness<LongOp>(backingMap, LongOp.DESERIALIZER, CommitType.READ_COMBINE_CAS, idService); HourDayMonthBucketer hourDayMonthBucketer = new HourDayMonthBucketer(); Dimension<DateTime> time = new Dimension<DateTime>("time", hourDayMonthBucketer, false, 8); Dimension<String> zipcode = new Dimension<String>("zipcode", new StringToBytesBucketer(), true, 5); DataCubeIo<LongOp> cubeIo = null; DataCube<LongOp> cube; Rollup hourAndZipRollup = new Rollup(zipcode, time, HourDayMonthBucketer.hours); Rollup dayAndZipRollup = new Rollup(zipcode, time, HourDayMonthBucketer.days); Rollup hourRollup = new Rollup(time, HourDayMonthBucketer.hours); Rollup dayRollup = new Rollup(time, HourDayMonthBucketer.days); List<Dimension<?>> dimensions = ImmutableList.<Dimension<?>>of(time, zipcode); List<Rollup> rollups = ImmutableList.of(hourAndZipRollup, dayAndZipRollup, hourRollup, dayRollup); cube = new DataCube<LongOp>(dimensions, rollups); cubeIo = new DataCubeIo<LongOp>(cube, dbHarness, 1, Long.MAX_VALUE, SyncLevel.FULL_SYNC); DateTime now = new DateTime(DateTimeZone.UTC); // Do an increment of 5 for a certain time and zipcode cubeIo.writeSync(new LongOp(5), new WriteBuilder(cube) .at(time, now) .at(zipcode, "97201")); // Do an increment of 10 for the same zipcode in a different hour of the same day DateTime differentHour = now.withHourOfDay((now.getHourOfDay()+1)%24); cubeIo.writeSync(new LongOp(10), new WriteBuilder(cube) .at(time, differentHour) .at(zipcode, "97201")); // Read back the value that we wrote for the current hour, should be 5 Optional<LongOp> thisHourCount = cubeIo.get(new ReadBuilder(cube) .at(time, HourDayMonthBucketer.hours, now) .at(zipcode, "97201")); Assert.assertTrue(thisHourCount.isPresent()); Assert.assertEquals(5L, thisHourCount.get().getLong()); // Read back the value we wrote for the other hour, should be 10 Optional<LongOp> differentHourCount = cubeIo.get(new ReadBuilder(cube) .at(time, HourDayMonthBucketer.hours, differentHour) .at(zipcode, "97201")); Assert.assertTrue(differentHourCount.isPresent()); Assert.assertEquals(10L, differentHourCount.get().getLong()); // The total for today should be the sum of the two increments Optional<LongOp> todayCount = cubeIo.get(new ReadBuilder(cube) .at(time, HourDayMonthBucketer.days, now) .at(zipcode, "97201")); Assert.assertTrue(todayCount.isPresent()); Assert.assertEquals(15L, todayCount.get().getLong());
一.OpenDataCube依赖环境的安装 1.miniconda安装 借助miniconda安装python,便于多种Python环境的管理。 1)下载最新版本的minconda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 注意:若提示wget命令不
三、DataCube NoteBooks的安装 1.下载源码 (odc) [root@song software]# git clone https://github.com/opendatacube/datacube-notebooks.git Cloning into 'datacube-notebooks'... remote: Enumerating objects: 121, done.
英文文档中有一些坑,最后导入数据还没搞定,以后再更新 参考 http://www.ceos-cube.org/docs/installation/index.html http://datacube-core.readthedocs.io/en/latest/index.html #下载源码与相关工具 mkdir ~/Datacube sudo apt-get update sudo apt
有的企业定制的datacube往往会出现CRT和SCP打不开的情况,这时候你只需将包含CRT和SCP的文件夹换一个路径就可以了,欢迎评论区留言讨论。
以下是转自SlidesShare.com上面的一份PPT,概念讲得很简单清晰。 转载于:https://www.cnblogs.com/mush0m/p/3633766.html
问题描述:在DataCube中,使用idea2019版,运行mybatis-spring1.2.2项目时,在确认所有配置路径都没问题的情况下,程序找不到配置路径,所找的路径是沙箱占用空间外的存储路径。 原因:沙箱设置中记录的登录账号和实际登录账号不一致。 解决办法:用沙箱记录的账号登录;或者,把路径改成沙箱占用空间内的路径。
Notes of "Quotient Cube: How to Summarize the Semantics of a Data Cube" •1. Terminology(相关术语) Roll up:向上综合 Drill down:向下细化或者向下钻取 w.r.t. :with respect to 关于 lattice: A lattice is partially ordered set
主要内容:1. 逻辑数据独立性,2. 物理数据独立性可以使用三模式体系结构来解释数据独立性。 数据独立性是指能够在数据库系统的一个级别修改模式而不改变下一个更高级别的模式的特征。 有两种类型的数据独立性: 1. 逻辑数据独立性 逻辑数据独立性是指能够在不必更改外部模式的情况下更改概念模式的特征。 逻辑数据独立性用于将外部级别与概念视图分开。 如果对数据的概念视图进行任何更改,那么数据的用户视图将不会受到影响。 逻辑数据独立性发生在用户界面级别。 2
我试图为一个编程类设置一个Java DB数据库。我正在遵循Deitel和Deitel教科书中的步骤: 我已经安装了JDK11.8.0_112。我运行的是Windows10。 我的安装在C:\program files\java\jdk1.8.0_112。我将JAVA_HOME var设置为C:\program files\java\jdk1.8.0_112 然后,连接'jdbc:derby:new
我的目标是为现有应用程序启用架构和数据迁移。 这种问题似乎已经被问过很多次了,不过我想是因为不同的要求和环境。 由于我在这个领域没有经验,请允许我先介绍一下应用程序的架构和我的假设。 该应用程序是一个多用户企业桌面应用程序,具有后端服务器,可以持久保存到任何主要数据库(MySql,Postgresql,SQL服务器,Oracle数据库等)。假设数据库是内部部署的,并由我们的客户维护。 使用的技术堆
很多时候,在保存数据前需要检查当前的数据是否符合某些特定的要求,如果不符合要求就给出提示信息,并停止保存,例如,我们在保存凭证之前就需要保证借贷必须相等,否则就应该提示“记帐凭证必须借贷平衡”。在E立方中怎么实现呢?答案就是使用“数据校验公式”。 下面我们就以“记账凭证”为例进行说明。 1、我们先按常规步骤建立“记账凭证”模板,如下图所示: 2、 接着设置“数据校验公
问题内容: 这似乎很简单,但我找不到解决方法。我需要显示整数的立方根是否为整数。我在Python 3.4中使用了float方法,但没有成功。如 但 我想,并没有成功。 我将不胜感激。 问题答案: 对于较小的数字(<〜10 13左右),可以使用以下方法: 这将截断浮点立方根,然后测试两个最接近的整数。 对于更大的数字,一种方法是仅使用整数来保留精度来对真正的立方根进行二进制搜索:
本文向大家介绍DBMS中的数据独立性,包括了DBMS中的数据独立性的使用技巧和注意事项,需要的朋友参考一下 数据库包含大量数据。并非所有数据都是用户数据,某些数据可能是元数据等。因此,数据库具有数据独立性非常重要。 数据独立性基本上意味着,如果在某个级别上更改数据,则不会影响更高级别上的数据视图,因此,更高级别上的数据应与更低级别上的数据修改无关。 有两种类型的数据独立性。这些是- 逻辑数据独立