首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MOQL简介

MOQL(MemoryObject Query Language)是一款基于Java的面向内存对象过滤、查询及统计分析的开源工具。它能够对内存中存储的集合对象,集合中的对象可以是Bean对象,数组对象、Map对象等各种对象,完成类似于数据库提供的查询及统计分析功能。它的语法结构类似于SQL,支持distinct、where、group、having、order、limit、聚集运算(count、sum、avg、min、max)、多表查询、连接查询(left、right、inner、full)、嵌套查询、以及集合运算(union、intersect、except)等。如:

更多内容详见《MOQL-选择器(Selector)》

MOQL与内存数据库(关系型)的关注点不同。内存数据库关注OLTP(Online TransactionProcessing),保证数据的ACID特性,并以此为基础为使用者提供查询及统计分析功能。当我们使用内存数据库的查询或统计分析功能时,首先需要将数据插入到数据库的相关表中,这种操作往往需要一个O-R转换过程,即将对象转换为表记录。而后,根据表结构使用SQL语句对数据进行统计分析。而MOQL不关注数据的存储形式,也不对数据的存储形式作任何约定。它的目标是为使用者装载入内存中的任何对象提供直接的查询及统计分析的功能,从而简化开发者的编程复杂度,为开发者提供更多的开发选择。它语法设计时的目标就是“对象”,有别于内存数据库中的面向“记录”。这点对于习惯了按表和记录方式思维并编写SQL的使用者来说,需要稍微适应一下。而相较SQL而言,MOQL在以Java为基础的面向对象的开发过程中更“面向对象”。

性能方面,从实现角度看MOQL与内存数据库相比会存在一定的差距。MOQL是面向对象查询的,很多数据类型是在运行时动态绑定的,这会影响数据的计算和比较效率;而内存数据库中的数据表结构是预先定义的,数据的数据类型明确,查询时可以更快的进行计算和比较。但这并不意味着MOQL在性能要求较高的场合完全派不上用场。当一个应用有固定的实时查询统计分析要求,且其数据是不断的累积增长的,那么完全可以用MOQL来解决。不断增长的数据可以向流水一样不断地流过MOQL提供的Selector(详见《MOQL-选择器(Selector)》),Selector里定义了查询统计分析的要求,所有流过Selector的数据都会被实时的统计分析,统计分析结果可以累计,且可随时读取。所有数据在未进行持久化之前就可以完成统计分析,在应用效果上比内存数据库来的简单、容易。

MOQL与.NET中提供的LINQ(语言集成查询)功能相似,都可以对内存对象进行统计分析,但LINQ提供了太多的接口,语法规则也变化比较多。不同的语言如C#和VB在使用LINQ时限制也不同,掌握起来难度较大。而MOQL在语法上更接近SQL,对于有SQL基础的编程者来说,学习曲线低,更容易掌握。

MOQL工具提供了Selector(选择器)、Filter(过滤器)以及Operand(操作数)三种主要的应用。Selector提供了对内存数据对象的查询及统计分析功能,更多内容详见《MOQL-选择器(Selector)》;Filter提供了对内存数据对象的过滤功能,其表达式支持“=”、“>”、“=”、“”、“between”、“like”、“in”及“is”等关系运算符以及“and”、“or”、“not”等逻辑运算符,如:

更多内容详见《MOQL-过滤器(Filter)》;Operand提供了表达式解析及计算功能,其支持表达式类型有:常量(整数、浮点数、字符串)、变量(普通变量、成员变量)、函数(普通函数、成员函数)、数组(系统数组、链表、Map等)、运算表达式(“+”、“-”、“*”、“/”、“%”、“&”、“|”、“^”)等。如:

更多内容详见《MOQL-操作数(Operand)》。

项目地址:https://github.com/colorknight/moql

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180426G1ZQBD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券