AGE 可比性、相等性、可排序性和等效性

AGE已经对原始类型(布尔值、字符串、整数和浮点数)和映射的相等性有了良好的语义。此外,Cypher对整数、浮点数和字符串的可比性和可排序性也有很好的语义。然而,处理不同类型的值与Postgres定义的逻辑和openCypher规范存在偏差:

  • 不同类型值之间的可比性已经定义。当作为谓词(在WHERE子句中)的评估的一部分时,这种偏差特别明显
  • 如果传递给ORDER BY的值具有不同的类型,则不会导致失败。

底层概念模型复杂且有时不一致。这导致了比较运算符、相等性、分组和ORDER BY之间的关系不清晰:

  • 可比性和可排序性一致地对齐,因为所有类型都可以被排序和比较。
  • 在AGE中,通过IN、=、DISTINCT和分组暴露的相等性和等效性的区别仅限于将两个null值彼此测试为相等
    • 在相等性中,null = null 是 null。
    • 在等效性中,当分组值和使用DISTINCT时,两个null值始终被视为相同的值。
    • 然而,如果null值是列表或映射值的元素,则相等性对待null值的方式会有所不同。

概念

openCypher规范涵盖了与相等性和排序相关的四个独特概念:

可比性

可比性由不等式运算符(>、<、>=、<=)使用,并定义了如何比较两个值的基本语义。

相等性

相等性由相等运算符(=、<>)和列表成员运算符(IN)使用。它定义了在这些情境下确定两个值是否相同的基本语义。相等性也被节点和关系模式中的字面地图隐式使用,因为这些字面地图仅仅是相等性谓词的简写表示。

可排序性

可排序性由ORDER BY子句使用,定义了如何对值进行排序的基本语义。

等价性

等价性由DISTINCT修饰符和投影子句(WITH、RETURN)中的分组使用,并定义了在这些情境中确定两个值是否相同的基本语义。

可比较性和等价性

比较运算符需要按照预期的方式进行比较运算 - 即等式和可比较性。但与此同时,它们还需要允许对列数据进行排序 - 即等价性和可排序性。

不幸的是,在同一查询中可能无法为等式和比较操作以及等价性和可排序性操作实现单独的比较运算符,而且在PostgreSQL中也无法实现。因此,我们将等价性和可排序性置于等式和可比较性之上,以便对输出数据进行排序。

可比较性

可比较性在任意一对值之间定义,如下所示。

  • 数字
    • 不同类型的数字(不包括NaN值和无穷大)按照数字在升序排列时,如果这两个数字被强制转换为任意精度的大十进制数(当前不属于Cypher类型系统),则它们将相互比较。
    • 与不是数字的任何值的比较遵循可排序性的规则。
    • 浮点数没有足够的精度来表示agtype整数和agtype数字范围内的所有整数。将整数或数字agtype转换为浮点数时,当转换值在高位和低位范围时,可能会产生意外的结果。
    • 整数
      • 整数按照数字在升序排列时进行数字比较。
    • 浮点数
      • 浮点数(不包括NaN值和无穷大)按照数字在升序排列时进行数字比较。
      • 正无穷大的类型是FLOAT,它等于自身并且大于任何其他数字,除了NaN值。
      • 负无穷大的类型是FLOAT,它等于自身并且小于任何其他数字。
      • NaN值是可比较的,且大于任何其他浮点数值。
    • 数字
      • 数字按照数字在升序排列时进行数字比较。
  • 布尔值
    • 布尔值比较的结果是false小于true。
    • 与不是布尔值的任何值的比较遵循可排序性的规则。
  • 字符串
    • 字符串按照字典顺序进行比较,即从字符串的开始到结束,逐对比较字符的升序排列。缺少在较短字符串中的字符被认为小于任何其他字符。例如,'a' < 'aa'。
    • 与不是字符串的任何值的比较遵循可排序性的规则。
  • 列表
    • 列表按照顺序进行比较,即从列表的开始到结束,逐对比较列表元素的升序排列。在较短列表中缺少的元素被认为小于任何其他值(包括null值)。例如,[1] < [1, 0],但也有 [1] < [1, null]。
    • 与不是列表的任何值的比较遵循可排序性的规则。
  • 映射
    • 映射的比较顺序未指定,由实现留待决定。
    • 映射的比较顺序必须与下面概述的等式语义一致。因此,任何包含将其键映射到null值的条目的映射都是不可比较的。例如,{a: 1} <= {a: 1, b: null} 的计算结果为null。
    • 与不是常规映射的任何值的比较遵循可排序性的规则。

实体

  • 顶点
    • 顶点的比较顺序基于分配的图形ID。
    • 边的比较顺序基于分配的图形ID。
  • 路径
    • 路径被比较就好像它们是从起始节点到结束节点的路径的交替节点和关系的列表。例如,给定节点 n1、n2、n3,以及关系 r1 和 r2,并且假设 n1 < n2 < n3 和 r1 < r2,那么从 n1 经由 r1 到 n3 的路径 p1 将小于从 n2 经由 r2 到 n1 的路径 p2。
    • 用列表表示:
p1 < p2
<=> [n1, r1, n3] < [n1, r2, n2]
<=> n1 < n1 || (n1 = n1 && [r1, n3] < [r2, n2])
<=> false || (true && [r1, n3] < [r2, n2])<=> [r1, n3] < [r2, n2]
<=> r1 < r2 || (r1 = r2 && n3 < n2)
<=> true || (false && false)
<=> true

* Comparison to any value that is not also a path will return false.
  • null 与任何其他值(包括其他 null 值)都是不可比较的。

不同 Agtype 之间的可排序性

当使用 <、<=、>、>= 时,不同 Agtype 的排序从最小值到最大值为:

  1. 路径
  2. 顶点
  3. 对象
  4. 数组
  5. 字符串
  6. 布尔值
  7. 数字、整数、浮点数
  8. NULL

 使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 期末速成(知识点+例题)

代码学习 &#xff08;1&#xff09;查看运行结果&#xff0c;思考为什么&#xff1f; [root red ~]#VAR11 ​ [root red ~]#(VAR12; echo $VAR1) ​ [root red ~]#echo $VAR1 ​ [root red ~]# { VAR12; echo $VAR1; } ​ [root red ~]# echo $VAR1VAR11&#xf…

千万级消息推送系统设计与实战

系统概述 功能: 支持千万级用户的消息推送&#xff0c;包括通知和透传消息&#xff0c;快速触达用户&#xff0c;提升用户留存和活跃度。接入方式: 通过API接入&#xff0c;实现消息的即时推送。管理后台: 提供网页端后台&#xff0c;便于应用授权、业务管理、消息管理及数据查…

Linux_网络编程_TCP

服务器客户端模型&#xff1a; client / server brow / ser b / s http p2p socket——tcp 1、模式 C/S 模式 》服务器/客户端模型 server :socket()-->bind()--->listen()-->accept()-->recv()-->close()client :socket()-->conn…

STM32第九课:STM32-基于标准库的42步进电机的简单I/O控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正比…

【计算机网络】tcp协议和upd协议有什么区别

文章目录 前言一、区别TCP&#xff08;传输控制协议&#xff09;&#xff1a;UDP&#xff08;用户数据报协议&#xff09;&#xff1a; 二、总结 前言 在网络通信中&#xff0c;传输层协议起着至关重要的作用。它们负责将应用层的数据从一台机器传送到另一台机器。其中&#x…

超越单兵作战:多智能体 Multi-Agent System (MAS)

超越单兵作战&#xff1a;多智能体 Multi-Agent System (MAS) Multi-Agent System 是指一个系统中有多个智能体同时工作的情况。在这样的系统中&#xff0c;每个智能体都具有一定程度的自主性&#xff0c;可以独立执行任务、做决定&#xff0c;并且能够与其他智能体进行交互&a…

STM32的Code、RO-data、RW-data、ZI-data和RAM以及flash的关系

对于刚接触stm32编程的同学来说&#xff0c;通常不知道如何选择合适型号的芯片来开发自己的项目&#xff0c;下面就分析一下多大的片内ram以及flash能符合我们项目的需求。 不知道大家有没有注意到&#xff0c;我们的项目每次编译完成后&#xff0c;都会出现这个Program Size&…

运维团队如何应对动环监控与IT监控分离的挑战

IT与机房动环监控的一体化是当下及未来的必然趋势&#xff0c;这一模式显著节省了运维过程中的时间与成本。一体化平台不仅消除了频繁切换系统的繁琐&#xff0c;更在一个统一界面上实现了多元化的管理运维功能&#xff0c;极大地提升了工作效率。 在机房升级或新建项目中&…

亚马逊卖家告别熬夜!批量定时上下架,自动调价

必用能功三个&#xff0c;不限制上传商品。 大家好&#xff0c;今天来讲下这款erp的定时上下架功能。 打开工具这栏选择智能调价&#xff0c;点击添加智能调价选择店铺&#xff0c;选择定时上架的商品添加也可以全部添加。每个商品的价格都是不同的&#xff0c;可以点击保底价…

windows10开启防火墙,增加入站规则后不生效,还是不能访问后端程序

一、背景&#xff1a; 公司护网要求开启防火墙&#xff0c;开启防火墙后&#xff0c;前后端分离的项目调试受影响&#xff0c;于是增加入站规则开放固定的后台服务端口&#xff0c;增加的mysql端口3306和redis端口6379&#xff0c;别人都可以访问&#xff0c;但是程序的端口808…

Android C++系列:Linux进程(三)

wait/waitpid 僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号 进程init进程,称为init进程领养孤儿进程 #include <sys/types.h> #include <sys/wait.…

力扣7.整数反转的两种算法详解

给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2 ^31, 2 ^31 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; …

抖音工具箱功能菜单解析分享

一 支持视频链接 采集/点赞/评论/收藏 二 支持导入 用户id私信 内容自定义 可 关注后私信对方 私信间隔自定义 三 支持多直播间 发言 内容-间隔自定义 五 支持 监听指定用户作品 新发作品 自动 点赞/评论/收藏 六 支持 视频评论实时监控 新发评论自动采集获取 七 智能 暂停…

NLP入门——卷积语言模型的搭建、训练与预测

语言模型建模是针对句子建模&#xff0c;主要分为掩码语言模型和自回归语言模型。 我们从corpus中截取一句话作为例子&#xff0c;这句话是bpe分词后的句子&#xff1a; 1994 年 5 月 17 日 安全 理事会 第 33 77 次 会议 通过 掩码语言模型的主要机制是&#xff1a;例如将33 7…

PostgREST API 安装及基础使用

PostgREST是一个独立的Web服务器&#xff0c;它将PostgreSQL数据库转换为RESTful API。它提供基于基础数据库的结构自定义的API。 PostgREST安装 首先访问Releases PostgREST/postgrest (github.com)&#xff0c;根据安装平台选择下载的源码。比如我现在的设备是Mac但是我的…

删掉此电脑中烦人的百度网盘、WPS、迅雷下载图标(还有导航栏)-win10/11

删掉此电脑的图标 1、首先 搜索 注册表管理器 或者 win R 输入 regedit 2、在红框的地方输入这串路径&#xff08;下2选1&#xff09;&#xff1a; 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ HKEY_CURRENT_US…

解决Linux中已安装JDK但是java找不到命令问题

报错解释&#xff1a; 这个错误表明即使在Linux系统中安装了Java Development Kit (JDK)&#xff0c;但是系统无法找到java命令。这通常是因为JDK的安装路径没有被加入到环境变量PATH中&#xff0c;导致系统无法在默认的路径下找到java执行程序。 解决方法&#xff1a; 检查J…

【C++】使用C++实现基于Socket的通信

在本文中&#xff0c;我们将详细讨论如何使用C实现基于Socket的通信&#xff0c;并设计一个TLV&#xff08;Type-Length-Value&#xff09;协议用于数据交互。TLV协议因其灵活性和可扩展性&#xff0c;在多种通信协议中被广泛使用&#xff0c;特别是在需要动态定义数据结构的场…

【Axure】产品原型如何在谷歌浏览器中打开

作为一名前端开发来说&#xff0c;在拿到产品的原型图后&#xff0c;如何打开&#xff1f;直接用谷歌浏览器打开&#xff0c;是打不开的&#xff0c;需要安装对应的插件。但是谷歌插件市场在不翻墙的情况下&#xff0c;是没有办法直接打开的&#xff0c;分享一种超级简单的方法…

深入解析RocketMQ的名字服务机制:功能、原理与应用

NameServer 是专为 RocketMQ 设计的轻量级名字服务&#xff0c;它的源码非常精简&#xff0c;八个类 &#xff0c;少于 1000 行代码。 这篇文章&#xff0c; 笔者会从基础概念、Broker 发送心跳包、NameServer 维护路由、Zookeeper vs NameServer 四个模块揭秘名字服务的设计精…