OLTP 和 OLAP遍历

  • 平等次于编写,到处运行
    Gremlin遵循“一浅编写,到处运行”的设计哲学。这代表不但有着的TinkerPop启用的图形系统都能实施Gremlin遍历,而且每个Gremlin遍历都好叫评估也实时数据库查询或批处理查询。(前者叫誉为在线交易流程(OLTP),后者叫叫做在线分析流程(OLAP))。

  • 协调多种图遍历
    这种普遍性是由于Gremlin遍历机实现的。这种分布式、基于图形的虚拟机了解什么协调多机器图遍历的推行。好处是,用户不需要上数据库查询语言和域特定的BigData分析语言(例如Spark
    DSL,MapReduce等)。Gremlin是构建基于图的应用程序所必需之,其余所有都交给Gremlin遍历机处理。
    统计 1

Memcached 统计命令

Memcached stats 命令

Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。

Memcached stats items 命令

Memcached stats items 命令用于展示各个 slab 中 item
的数码及存储时增长(最后一浅看离开现在之秒数)。

Memcached stats slabs 命令

Memcached stats slabs
命令用于展示各个slab的信,包括chunk的尺寸、数目、使用情况相当。

Memcached stats sizes 命令

Memcached stats sizes 命令用于展示有item的大小与个数。

该信息返回两列,第一排列是 item 的尺寸,第二排是 item 的个数。

Memcached flush_all 命令

Memcached flush_all 命令用于用于清理缓存中之拥有
key=>value(键=>值) 对。

该令提供了一个可选参数 time,用于在制订的岁月晚行清理缓存操作。

命令式和声明式遍历

Gremlin遍历可以以命令式(程序式)方式,声明性(描述性)方式编写,也堪分包命令性和声明性的夹方式编写。

  • 命令式编写方式
    取Gremlin合作者的上级名字分布:

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      in("manages").
      groupCount().by("name")
    

    一个命令式的Gremlin遍历告诉运行器如何实行遍历中之各一样步;然后,遍历器分裂到所有的“Gremlin”的合作方(去除Gremlin自己);下一致步,遍历器走至“Gremlin”合作者的顶头上司(managers),最终根据上级的名字进行统计分发。

故是命令式的Gremlin遍历,就是她明确地、程序化地报告遍历器“去这里,然后去那边”。

  • 声明式编写方式
    以下使用声明式编写方式实现了同等的结果:

    g.V().match(
      as("a").has("name","gremlin"),
      as("a").out("created").as("b"),
      as("b").in("created").as("c"),
      as("c").in("manages").as("d"),
    where("a",neq("c"))).
      select("d").
      groupCount().by("name")
    

    声明式的Gremlin遍历并无克告诉遍历器执行其的手续的逐条,而是允许每个遍历器从一个(可能嵌套的)模式的汇中甄选一个模式来推行。

可,声明遍历具有额外的利,它不但用了编译时查询计划器(如命令式遍历),而且还是一个运作时查询计划器,根据每个模式的历史统计信息选择生一个推行哪个遍历模式

  • 福利那些倾向于减少/过滤大多数数额的模式。

用户可选取上述提出的法编写好的遍历语句。不管怎样,用户之遍历语句都见面依据具体的推行引擎和遍历策略traversal
strategies深受重写。Gremlin为用户提供灵活性表达好的查询的;图系统啊本着实际启用TinkerPop的数据系统进行中地评估图遍历提供了灵活性。

Memcached 存储命令

Memcached set 命令

Memcached set 命令用于将 value(数据值) 存储于指定的 key(键) 中。

而set的key已经是,该令可以创新该key所对应之本原的数,也尽管是实现创新的意。

语法:

set 命令的基本语法格式如下:

set key flags exptime bytes [noreply] value

参数说明如下:

  • key:键值 key-value 结构面临之 key,用于查找缓存值。
  • flags:可以包键值对的整型参数,客户机使用它们存储关于键值对的附加信息
  • exptime:在缓存中保存键值对的辰长(以秒为单位,0 代表永远)
  • bytes:在缓存中蕴藏的字节数
  • noreply(可选): 该参数告知服务器无需返回数据
  • value:存储的价(始终在第二执行)(可一直掌握也key-value结构被的value)

出口信息认证:

  • STORED:保存成功后输出。
  • ERROR:在保失败后输出。

Memcached add 命令

Memcached add 命令用于将 value(数据值) 存储于指定的 key(键) 中。

倘若 add 的 key 已经在,则非见面更新数据(过期之 key
会更新),之前的值将仍然维持一致,并且您将取得响应

出口信息认证:

  • STORED:保存成功后输出。
  • NOT_STORED :在保障失败后输出。

Memcached replace 命令

Memcached replace 命令用于替换已在的 key(键) 的 value(数据值)。

苟 key 不设有,则替换失败,并且您将得到响应 NOT_STORED。

Memcached append 命令

Memcached append 命令用于为曾存在 key(键) 的 value(数据值) 后面长数据

Memcached prepend 命令

Memcached prepend 命令用于为已经在 key(键) 的 value(数据值) 前面追加数据

输出信息验证:

  • STORED:保存成功后输出。
  • NOT_STORED:该键在 Memcached 上无设有。
  • CLIENT_ERROR:执行错误。

Memcached CAS 命令

Memcached CAS(Check-And-Set 或 Compare-And-Swap)
命令用于实践一个”检查并设置”的操作

她不过以当前客户端最后一糟取值后,该key
对应的值没有吃别客户端修改的状况下, 才能够将价值写副。

检查是透过cas_token参数进行的,
这个参数是Memcach指定为已经存在的要素的一个唯一的64员值。

语法:

CAS 命令的基本语法格式如下:

cas key flags exptime bytes unique_cas_token [noreply] value

参数说明如下:

  • key:键值 key-value 结构面临之 key,用于查找缓存值。
  • flags:可以概括键值对的整型参数,客户机使用它们存储关于键值对的额外信息
  • exptime:在缓存中保存键值对的年华长(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • unique_cas_token通过 gets 命令获取的一个唯一的64各值。
  • noreply(可选): 该参数告知服务器不需要回到数据
  • value:存储的价(始终在第二实行)(可一直了解吧key-value结构被之value)

实例

假如以 Memcached 上使用 CAS 命令,你需要由 Memcached 服务商通过 gets
命令获取令牌(token)。

gets 命令的效用相近于基本的 get 命令。两个命中的区别在,gets
返回的信息有点多片:64 位的整型值非常像名称/值对的 “版本” 标识符。

实例步骤如下:

  • 倘没安装唯一令牌,则 CAS 命令执行错误。
  • 一经键 key 不有,执行破产。
  • 增补加键值对。
  • 经过 gets 命令获取唯一让牌。
  • 应用 cas 命令更新数据
  • 采用 get 命令查看数据是否更新

出口信息验证:

  • STORED:保存成功后输出。
  • ERROR:保存出错或语法错误。
  • EXISTS:在最终一糟取值后另外一个用户为在更新该数量。
  • NOT_FOUND:Memcached 服务上未有拖欠键值。

### Memcached 查找命令

**Memcached get 命令**

Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key
不存在,则返回空。

语法:

get 命令的基本语法格式如下:

get key

多个 key 使用空格隔开,如下:

get key1 key2 key3

参数说明如下:

-   key:键值 key-value 结构中的 key,用于查找缓存值。

**Memcached gets 命令**

Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key
不存在,则返回空。

**Memcached delete 命令**

Memcached delete 命令用于删除已存在的 key(键)。

输出信息说明:

-   DELETED:删除成功。
-   ERROR:语法错误或删除失败。
-   NOT\_FOUND:key 不存在。

**Memcached incr 与 decr 命令**

Memcached incr 与 decr 命令用于对已存在的 key(键)
的数字值进行自增或自减操作。

incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。

如果 key 不存在返回 NOT\_FOUND,如果键的值不为数字,则返回
CLIENT\_ERROR,其他错误返回 ERROR。

输出信息说明:

-   NOT\_FOUND:key 不存在。
-   CLIENT\_ERROR:自增/减值不是对象。
-   ERROR其他错误,如语法错误等。

参考资料

The Gremlin Graph Traversal Machine and
Language

统计 2

Gremlin简介

Gremlin是Apache TinkerPop
框架下的觊觎遍历语言。Gremlin是一致栽函数式数据流语言,可以让用户用简单之计表达复杂的性图(property
graph)的遍历或询问。每个Gremlin遍历由同样系列步骤(可能有嵌套)组成,每一样步都以数据流(data
stream)上实行一个原子操作。

Gremlin包括三独中心的操作:

  • map-step
    对数码流中的靶子进行转换;
  • filter-step
    针对数码流中的目标就是行过滤;
  • sideEffect-step
    针对数码流进行计算统计;

以下是Gremlin在有的景中之求实行使:

  • 1.查查找Gremlin朋友之爱侣

    g.V().has("name","gremlin").
      out("knows").
      out("knows").
      values("name")
    
  • 2.寻找那些由于少个朋友一道开创的品类

    g.V().match(
      as("a").out("knows").as("b"),
      as("a").out("created").as("c"),
      as("b").out("created").as("c"),
      as("c").in("created").count().is(2)).
    select("c").by("name")
    
  • 3.被来Gremlin的具有上司,直至CEO

    g.V().has("name","gremlin").
      repeat(in("manages")).
    until(has("title","ceo")).
      path().by("name")
    
  • 4.收获Gremlin合作者的头衔分布

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      groupCount().by("title")
    
  • 5.得Gremlin购买活之有关产品列表并排序

    g.V().has("name","gremlin").
      out("bought").aggregate("stash").
      in("bought").out("bought").
    where(not(within("stash"))).
      groupCount().order(local).by(values,decr)
    
  • 6.获排名前十的着力人物

    g.V().hasLabel("person").
      pageRank().
    by("friendRank").
    by(outE("knows")).
      order().by("friendRank",decr).
      limit(10)
    

无缝嵌入主语言

  • 合主开发语言和图查询语言
    经典数据库查询语言(如SQL)被当和终极在生环境面临利用的编程语言截然不同。因此,经典数据库要求开发人员既使编主编程语言,还要编写数据库相应的查询语言。Gremlin统一了此分,因为遍历可以为此支持力量整合以及嵌套(主要编程语言都支持)的其它编程语言编写。因此,用户之Gremlin遍历可以采用应用程序语言(主语言,Host
    language)编写,并受益于主语言及其工具(例如类型检查,语法高亮,点就等)所提供的长。目前存各种Gremlin语言变体,包括:Gremlin-Java,Gremlin-Groovy,Gremlin-Python,Gremlin-Scala等。

  • 演示程序
    较之下简单种植办法,高低立判:

    public class GremlinTinkerPopExample {
      public void run(String name, String property) {
    
    Graph graph = GraphFactory.open(...);
    GraphTraversalSource g = graph.traversal();
    
    double avg = g.V().has("name",name).
                   out("knows").out("created").
                   values(property).mean().next();
    
    System.out.println("Average rating: " + avg);
      }
    }
    

public class SqlJdbcExample {
  public void run(String name, String property) {

    Connection connection = DriverManager.getConnection(...)
    Statement statement = connection.createStatement();
    ResultSet result = statement.executeQuery(
      "SELECT AVG(pr." + property + ") as AVERAGE FROM PERSONS p1" +
        "INNER JOIN KNOWS k ON k.person1 = p1.id " +
        "INNER JOIN PERSONS p2 ON p2.id = k.person2 " +
        "INNER JOIN CREATED c ON c.person = p2.id " +
        "INNER JOIN PROJECTS pr ON pr.id = c.project " +
          "WHERE p.name = '" + name + "');

    System.out.println("Average rating: " + result.next().getDouble("AVERAGE")
  }
}