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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

websockt初始化,创建一个webSocket示例

写文思路&#xff1a; 以下主要从几个方面着手写websocket相关&#xff0c;包括以下&#xff1a;什么是webSocket&#xff0c;webSocket的优点和劣势&#xff0c;webSocket工作原理&#xff0c;webSocket握手示例&#xff0c;如何使用webSocket(使用webSocket的一个示例)&#…

【安全设备】堡垒机

一、什么是堡垒机 安全运维审计与风险控制系统即堡垒机&#xff0c;前身为跳板机&#xff0c;跳板机是一个简单的管理设备&#xff0c;但缺乏对运维操作的控制和审计能力。堡垒机是一种特定的网络安全设备&#xff0c;用于在一个网络环境中保护数据和网络不受外部和内部用户的…

k8s record 20240708

一、PaaS 云平台 web界面 资源利用查看 Rancher 5台 CPU 4核 Mem 4g 100g的机器 映射的目录是指docker重启后&#xff0c;数据还在 Rancher可以创建集群也可以托管已有集群 先docker 部署 Rancher&#xff0c;然后通过 Rancher 部署 k8s 想使用 kubectl 还要yum install 安…

深度分析:智算中心建设 - GPU选型

大模型加持AI技术赛道革新发展&#xff0c;“大模型热”愈演愈烈。2024年2月15日&#xff0c;OpenAI首个视频生成模型Sora发布&#xff0c;完美继承DALLE 3的画质和遵循指令能力&#xff0c;能生成长达1分钟全尺寸的高清视频。2024年5月14日&#xff0c;OpenAI发布GPT-4o&#…

comsol达西定律的小例子

comsol达西定律的小例子

clean code-代码整洁之道 阅读笔记(第十七章 终章)

大纲 第十七章 味道与启发 17.1 注释 C1&#xff1a;不恰当的信息 C2&#xff1a;废弃的注释 C3&#xff1a;冗余注释 C4&#xff1a;糟糕的注释 C5&#xff1a;注释掉的代码 17.2 环境 E1&#xff1a;需要多步才能实现的构建 E2&#xff1a;需要多步才能做到的测试 …

computed传参

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 computed可以依据其他变量动态计算出值&#xff0c;但是v-for渲染html时&#xff0c;需要根据html中 传入的不同变量&#xff0c;来分别做处理或者利用 html中的值该…

node+vue的仿网易云音乐网站-计算机毕业设计源码02905

摘要 本论文基于Node.js和Vue.js技术&#xff0c;以仿网易云音乐网站为目标&#xff0c;设计并实现了一个具有音乐播放、歌曲搜索、歌单推荐等功能的音乐网站。首先&#xff0c;论文介绍了网易云音乐网站的特点和功能&#xff0c;分析了其前端和后端技术栈&#xff0c;为后续设…

CTFShow的36D杯

神光 还是想了一下&#xff0c;但那个异或搞不出来&#xff0c;都是对dword_41A038操作&#xff0c;想起开头就给了 key &#xff0c;还有反调试应该是要调试的 输出的应该就是 flag &#xff0c;只是为什么是乱码呢&#xff1f; 放 od 再试试&#xff0c;直接就出 flag 了&am…

Docker搭建kafka+zookeeper以及Springboot集成kafka快速入门

参考文章 【Docker安装部署KafkaZookeeper详细教程】_linux arm docker安装kafka-CSDN博客 Docker搭建kafkazookeeper 打开我们的docker的镜像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…

iPhone数据恢复篇:iPhone 数据恢复软件有哪些

问题&#xff1a;iPhone 15 最好的免费恢复软件是什么&#xff1f;我一直在寻找一个恢复程序来恢复从iPhone中意外删除的照片&#xff0c;联系人和消息&#xff0c;但是我有很多选择。 谷歌一下&#xff0c;你会发现许多付费或免费的iPhone数据恢复工具&#xff0c;声称它们可…

[C++]——同步异步日志系统(3)

同步异步日志系统 一、日志系统框架设计1.1模块划分1.1.1 日志等级模块1.1.2 日志消息模块1.1.3 日志消息格式化模块1.1.4 日志落地模块&#xff08;日志落地的方向是工厂模式&#xff09;1.1.5 日志器模块&#xff08;日志器的生成是建造者模式&#xff09;1.1.6 异步线程模块…

【HBZ分享】TCP连接完成后又是如何保证数据的可靠性传输

前提 发送发发送数据时&#xff0c;需要给出一个seq编号。第一个数据包的seq编号是一个随机数&#xff0c; 从第二个开始&#xff0c;seq编号就是【第一次的seq数据包大小】&#xff0c; 即接收方响应过来的期待数据包编号 ACK机制 接收方收到数据后&#xff0c;要给发送方回…

Html5前端基本知识整理与回顾下篇

今天我们继续结合发布的Html5基础知识点文档进行复习&#xff0c;希望对大家有所帮助。 目录 列表 无需列表 有序列表 自定义列表 样例 表格 基本属性 ​编辑 相关属性 Border Width Height ​编辑 表格标题 ​编辑 表格单元头 合并单元格 垂直单元格合并 水…

实践致知第12享:如何新建一个Word并设置格式

一、背景需求 小姑电话说&#xff1a;要新建一个Word文档&#xff0c;并将每段的首行设置空2格。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“DOC文档”或“DOCX文档”都可以&#xff0c;如下图所示。 之后&#xff0…

npm install失败,数据源过期

npm install时报错&#xff1a;“Unexpected token &#xff1c; in JSON at position 0 while parsing near ‘&#xff1c;!DOCTYPE html&#xff1e;” 执行Vue2项目安装时&#xff0c;出现报错了&#xff0c;显示ERROr: **npm ERR! Unexpected token < in JSON at posi…

58、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1&#xff09;原理简介 基于径向基神经网络&#xff08;Radial Basis Function Neural Network, RBFNN&#xff09;的曲线拟合是一种常用的非线性拟合方法&#xff0c;通过在输入空间中使用径向基函数对数据进行处理&#xff0c;实…

cesium 雷达扫描

cesium 雷达扫描 (下面附有源码) 实现思路 1、通过改变圆型材质来实现效果, 2、用了模运算和步进函数(step)来创建一个重复的圆形图案 3、当纹理坐标st落在垂直或水平的中心线上时,该代码将改变透明度和颜色,以突出显示这些线 示例代码 <!DOCTYPE html> <ht…

完美解决windows开机时,系统提示此windows副本不是正版的正确解决方法,亲测有效!!!

完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#…

二分查找3

1. 有序数组中的单一元素&#xff08;540&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 二分查找解题关键就在于去找到数组的二段性&#xff0c;这里数组的二段性是从单个数字a开始出现然后分隔出来的&#xff0c;如果mid落入左半部分那么当mid为偶数时nums[mid1]…