最近项目上稍微没那么紧迫,准备花点时间来学习下ea,作为后面的知识储备。
lz工作上也是主要处理一些数据处理及统计分析的工作,但是还没有远远达到海量级别的数据量级别,但是如果以后要往城市大脑发展的话,实时性及海量数据检索等方面估计会有一些要求。
ea从特点来说,属于一种非关系数据库,从数据存储格式及展现方式来说,以json的方式,能够很好的体现数据之间的关系,关系式数据库将数据拘束在table当中,使用时,又要组合起来形成对象,损失了对象的灵活性。
ea中数据都是可索引的,对于查找数据时,不同于关系数据库的b+树,他采用的是一种倒排的形式,数据组成方面,是index---type---document,分别对应关系数据库的database---table---row,ea这种的json方式,比较符合一般非关系数据库的存储方式,比如常常用到的mongodb,也是document这种形式。另外从扩展方面来说,横向扩展也是比较方便,可以很方便的增加其他ea节点,对于分布式系统来说是个很好的选择,同时,从故障恢复和节点备份方面来说,采用的是主分片和复制分片的策略,复制分片是主分片的完整复制,主分片故障时,其他复制分片通过选举的策略,都有可能成为主分片。
以上是我的一个比较粗浅的一个认识,下面简单说一下他的增删改查的一些操作。
1、add
PUT /megacorp/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
2、query
GET /megacorp/employee/_search?q=last_name:Smith
GET /megacorp/employee/_search
{
...
"hits": {
"total": 2,
"max_score": 0.30685282,
"hits": [
{
...
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
},
{
...
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [ "music" ]
}
}
]
}
}
查询可以传递参数,也可以不传递参数,同时会返回命中结果及匹配度
除此之外,ea还支持一种特有DSL语言来构建更加复杂的查询条件,比如分词匹配、区间查询 ,
GET /megacorp/employee/_search
{
"query" : {
"filtered" : {
"filter" : {
"range" : {
"age" : { "gt" : 30 } <1>
}
},
"query" : {
"match" : {
"last_name" : "smith" <2>
}
}
}
}
}
上述语句过滤了姓氏为smith且年龄大于30的员工的记录。
3、update
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}
更新无则创建,有则更新。
4、delete
DELETE /website/blog/123
{
"found" : true,
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 3
}
ea的响应体也是一种json格式,同时会返回符合rest规范的响应结果,状态码等信息
5、聚合
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
{
...
"hits": { ... },
"aggregations": {
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "forestry",
"doc_count": 1
},
{
"key": "sports",
"doc_count": 1
}
]
}
}
}
除此之外,ea还有很多高级操作,比如分布式的增删改查、分片的细节、结构化等,后面再慢慢进行补充。