以下内容翻译自
https://github.com/azavea/geowave-geomesa-comparative-analysis
概述
**
本文详细介绍了两个开源地理空间大数据框架GeoWave和GeoMesa之间的比较分析结果,主要包括功能比较和对于一些测试用例的性能分析。两者存在大量重叠的功能,在空间索引和查询方面,有很多不同。测试所用版本为GeoMesa 1.2.6和GeoWave 0.9.3,数据存储使用Accumulo,得出以下四个结论:
- 对于查询结果较多的查询,GeoMesa的性能更好,而对于较小的结果集,GeoWave的性能更好;
- 对于时间范围较大的查询,GeoWave的性能更好,而当时间范围较小(大约两周或更短)时,GeoMesa的性能更好;
- GeoMesa在非点数据集用例中表现更好;
- 在多用户用例(并发执行16到32个查询)中,GeoWave优于GeoMesa。
这两个系统在大多数情况下均表现良好,并没有哪一个明显优于另一个。我们根据此分析为两个项目相互协作的方式提供了一些建议。
**
介绍
**
GeoMesa和GeoWave是两个处理空间地理大数据的开源项目。总体而言,这些项目可以解决许多相同类型的问题。由于存在这种重叠,对于刚刚接触空间地理大数据的新用户很难理解这些项目之间的区别以及适用性。甚至在哪些方面,对于从事空间地理大数据处理的资深人士也可能不清楚,例如在Accumulo中为空间和时空数据建立索引。
有关这两个项目的背景信息,请访问其官方网站:
- GeoWave:GeoWave
- GeoMesa:https://www.geomesa.org/
功能比较
GeoMesa和GeoWave项目都包含许多功能,也并非全部重叠。下面的维恩图不是完整的功能列表,而是指出了GeoWave和GeoMesa的核心功能和某些比较有特色的功能。
如图所示,两者都是使用空间填充曲线算法来建立空间索引。但是,还有许多不同的功能,下面我们描述一些主要差异。更详细的功能列表请参考附录A:GeoMesa和GeoWave功能的详细信息。
架构
在索引策略方面,GeoWave专注于为任意数据库建立N维索引。GeoMesa则专注于地理空间数据。
GeoWave的架构设计更加抽象,数据存储和访问无关。这种架构为数据存储方面的开发提供更大的灵活性,这可以解释为什么GeoWave对HBase的支持比GeoMesa更加成熟(旁白:外国人真是啰嗦,不就是面向接口编程,增强扩展性)。GeoMesa更多的是使用GeoTools,更依赖于GeoTools作为基础库。GeoMesa还减少了抽象设计。这可能会导致系统难以从一种数据库迁移到另一个数据库。但是,较少的抽象可能会使开发更加简单,一些开发人员可能会觉得GeoMesa API更易于理解和使用。
语言
GeoMesa是使用Scala开发的,GeoWave是使用Java开发的。Scala和Java都是把源代码编译为Java虚拟机(JVM)字节代码的语言,都可以在JVM之上执行。这意味着两个项目都可以使用相同的依赖关系,这两个项目的某些功能(包括核心数据类型:GeoTools SimpleFeature)都依赖于GeoTools。但是,Scala和Java语言之间的差异也很多,这是两项目之间最大的差异之一,因为这有可能成为开发人员选型的关键或者最直接的因素。虽然GeoMesa用Scala编写,但也实现了GeoTools接口,这些接口允许Java开发人员无需编写Scala即可轻松使用GeoMesa。但是,如果开发人员不熟悉Scala语言,想要阅读源代码或直接使用GeoMesa类型,则可能会遇到困难。
Accumulo 索引
这两个项目以类似的方式建立Accumulo中的索引,但是