Orientdb基本操作

article/2025/11/10 15:01:05

一、建模

1、 模型定义-销售数据库(saledb)

这里写图片描述

顶点继承自属性
人(Person) 姓名(name)
性别(sex)
出生日期(birthday)
员工(Employee)V、Person工号(workerNo)
客户(Customer)V、Person会员号(memberNo)
商品(Product) 商品名(name)
生产日期(productionDate)
价格(price)
厂商(factory)
食品(Food)V、Product 
服装(Costume)V、Product尺寸(size)
继承自属性
销售(SafeOf)E销售日期(safeDate)
购买(BuyOf)E购买日期(buyDate)
服务(ServiceOf)E服务日期(serviceDate)

2、 模型定义SQL

2.1新建数据库

语法:

CREATE DATABASE <database-url> [<user> <password> <storage-type> [<db-type>]] [-restore=<backup-path>]

说明:

  • <database-url>:连接方式,格式为,:。
    • <mode>:模式,为plocal 或者 remote
    • <path>:数据库在磁盘存储位置
  • <user>:数据库登录用户名
  • <password>:数据库登录密码
  • <storage-type>:存储类型,可以是PLOCAL 或者 MEMORY
  • <db-type>:数据库类型,可以是GRAPH 或者 DOCUMENT,默认为GRAPH

举例:

CREATE DATABASE remote:10.250.20.146/saledb root 123456 PLOCAL

特别说明

该命令只能在控制台执行。

新建数据库也可以在orientdb studio登录界面创建,在studio中新建数据库的界面如下图所示。

这里写图片描述

2.2模型定义

新建Class语法:

CREATE CLASS <class> [EXTENDS <super-class>] [CLUSTER <cluster-id>*] [ABSTRACT]

说明:

  • <class>:类名,以大写字母、下划线、美元符号开头。
  • <super-class>:父类
  • <cluster-id>:你需要在该类使用的存储cluster的id,多个用逗号分隔,cluster可以预先定义然后在这里指定。不指定会自己创建,默认创建的cluster个数为CPU核数。
  • <total-cluster-number>:显示指定创建的cluster个数
  • ABSTRACT:是否抽象类,是否抽象类,抽象类不可被直接使用。

新建属性语法:

CREATE PROPERTY <class>.<property> <type> [<link-type>|<link-class>] ( <property constraint> [, <property-constraint>]* ) [UNSAFE]

说明:

  • <class>:需要添加属性的类。
  • <property>:新添加的属性。
  • <type>:数据类型
  • <link-type>:数据类型为集合类型时,这个通过这个指明集合元素的基本数据类型。
  • <link-class>:数据类型为集合类型时,集合元素类型为对象,通过这个指明具体对象。
  • <property-constraint>:属性约束,限制属性最大、最小、是否空等。
  • UNSAFE:安全检查,是否检查记录已经存在,如果这个属性只会增加,可以设置为UNSAFE,在大数据集下可以减少不必要的检查时间。

建Class-人(Person)

CREATE CLASS Person ABSTRACT;
CREATE PROPERTY Person.name STRING;
CREATE PROPERTY Person.sex STRING;
CREATE PROPERTY Person.birthday DATE;

建Class-实体-员工(Employee)

CREATE CLASS Employee EXTENDS Person,V;
CREATE PROPERTY Employee.workerNo INTEGER;

建Class-实体-客户(Customer)

CREATE CLASS Customer EXTENDS Person,V;
CREATE PROPERTY Customer.memberNo INTEGER;

建Class-商品(Product)

CREATE CLASS Product ABSTRACT;
CREATE PROPERTY Product.name STRING;
CREATE PROPERTY Product.productionDate DATE;
CREATE PROPERTY Product.price FLOAT;

建Class-实体-食品(Food)

CREATE CLASS Food EXTENDS Product,V;

建Class-实体-服装(Costume)

CREATE CLASS Costume EXTENDS Product,V;
CREATE PROPERTY Costume.size STRING;

建Class-关系-销售(SaleOf)

CREATE CLASS SaleOf EXTENDS E;
CREATE PROPERTY SaleOf.saleDate DATE;

建Class-关系-购买(BuyOf)

CREATE CLASS BuyOf EXTENDS E;
CREATE PROPERTY BuyOf.buyDate DATE;

建Class-关系-服务(ServiceOf)

CREATE CLASS ServiceOf EXTENDS E;
CREATE PROPERTY ServiceOf.serviceDate DATE;

二、 增删改查

1、 顶点

1.1 添加-顶点-员工

方式一:创建顶点方式添加

CREATE VERTEX Employee SET name = '张三', sex = '男',birthday='1989-08-05',workerNo='1001';
CREATE VERTEX Employee CONTENT { "name" : "王五",  "sex" : "男","birthday":"1977-10-12","workerNo":"1003" }

方式二:SQL insert添加

insert into Employee(name,sex,birthday,workerNo)values('李四','男','1998-07-01','1002');

1.2 删除-顶点-员工

根据内部ID(@rid)删除

DELETE VERTEX #34:0

更具属性条件删除

DELETE VERTEX Employee WHERE workerNo='1003'

1.3 修改-顶点-员工

UPDATE Employee SET sex = '女' WHERE workerNo='1003'

1.4 查询-顶点-员工

select * from Employee
select * from Employee where sex='男'

2、 边

2.1 添加边

语法:

CREATE EDGE <class> [CLUSTER <cluster>] [UPSERT] FROM <rid>|(<query>)|[<rid>]* TO <rid>|(<query>)|[<rid>]*[SET <field> = <expression>[,]*]|CONTENT {<JSON>}[RETRY <retry> [WAIT <pauseBetweenRetriesInMs]] [BATCH <batch-size>]

说明:

  • <class>:定义的边类,继承制E的类。
  • <cluster>:指定边存储的cluster
  • UPSERT:覆盖更新,2个顶点已经建立了关系则跳过。边建了唯一索引,如果重复添加相同索引会报错。
  • JSON:边记录内容。
  • RETRY:遇到冲突,重试次数。
  • WAIT:再次重试间隔时间,单位毫秒。
  • BATCH:每批次处理数据量,默认100。避免顶点过多,内存爆掉的情况。

通过顶点RID构建关系

CREATE EDGE BuyOf FROM #42:0 TO #54:0 SET buyDate = '2018-09-12'

通过查询找到点然后构建关系

CREATE EDGE BuyOf 
FROM (SELECT FROM Customer WHERE name = '李敏') 
TO   (SELECT FROM Food WHERE name = '可乐') 
SET buyDate = '2018-08-13'

组网完成后的图如下:

这里写图片描述

2.2 删除边

语法:

DELETE EDGE ( <rid>|[<rid> (, <rid>)*]|( [ FROM (<rid> | <select_statement> ) ] [ TO ( <rid> | <select_statement> ) ] )|[<class>] ([WHERE <conditions>][LIMIT <MaxRecords>] [BATCH <batch-size>]

说明:

  • FROM:需要删除边的起始顶点。
  • TO:需要删除边的结束顶点。
  • WHERE:过滤条件
  • LIMIT:删除的边的最大数量。
  • BATCH:每一小批次处理数据量,默认100.

根据RID删除

DELETE EDGE #65:0

通过RID批量删除

DELETE EDGE [#22:38482,#23:232,#33:2332]

通过过滤条件删除2点间的边

DELETE EDGE FROM #11:101 TO #11:117 WHERE date >= "2012-01-15"

2.3 修改边

语法:

UPDATE EDGE <edge> [SET|INCREMENT|ADD|REMOVE|PUT <field-name> = <field-value>[,]*]|[CONTENT|MERGE <JSON>][RETURN <returning> [<returning-expression>]][WHERE <conditions>][LOCK default|record][LIMIT <max-records>] [TIMEOUT <timeout>]

说明:

  • <edge>:需要修改的边,可以是下面几种类型。
    • Class:根据class更新
    • Cluster:根据cluster更新,使用CLUSTER前缀。
    • Record ID:根据记录ID更新
  • SET:需要更新的属性值。
  • REMOVE:从属性集合中移除的元素。
  • RETURN:更新处理完成后返回的内容,有下面几种选择。
    • COUNT:影响的记录数
    • BEFORE:返回修改前的值
    • AFTER:返回修改后的值
    • DEFAULT:不锁,同步更新。事物冲突的时候会抛出异常。
  • WHERE:过滤条件
  • LOCK:数据加载和更新时使用的锁类型,有下面2中类型。
    • DEFAULT:不锁,同步更新。事物冲突的时候会抛出异常。
    • RECORD:更新的时候锁定记录。
  • LIMIT:更新的最大记录数。

修改边#59:0的出端顶点为#36:0

UPDATE EDGE #59:0 SET out= #36:0

修改边属性

UPDATE EDGE #59:0 SET buyDate= '2012-03-11'

3、 图查询

找到销售员王五2018-08-08这天服务的客户都买了哪些商品。

MATCH {class:Employee,as:employee,where:(name="王五")}.
outE("ServiceOf"){as:se,where:(serviceDate='2018-08-08')}.
inV(){as:cust}.
out("BuyOf"){as:product}
return product

http://chatgpt.dhexx.cn/article/YkcdMdTg.shtml

相关文章

redis切换db方法

//最近发现redis 数据都是默认存在db0的 看着就崩溃了。这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开 后面自己总结了三种方法给大家分享下 有什么不足的地方大家也可以指出来哦 提供了三种方式 切换db的方法 1- 第一种方式最简单 先看看redis 的yml 文件…

Redis基本介绍

文章目录 1.Redis简介2.Redis应用场景3.Redis单线程模型4.Redis常用命令5.Redis数据结构6.SpringBoot整合Redis框架 参考蚂蚁课堂 1.Redis简介 Redis属于No-sql数据库类似于MongoDB&#xff0c;是一个完全开源免费的一个高性能的key-value数据库。它是基于内存的数据库&#…

DB2的HADR的搭建

整理这篇文档主要记录复制搭建过程中遇到的问题&#xff0c;被其中一个搞了好久才突然一下子明白过来。。。。 1.备份恢复的时候报错&#xff1a;SQL0970N The system attempted to write to a read-only file. SQLSTATE55009 2.SQL1768N Unable to start HADR. Reason cod…

gaussDB安装

1、用winSCP连接弹性服务器&#xff0c;将windows下的gaussDB安装包复制到linux下 2、将GaussDB安装包从root目录下复制一份到/gs目录下 3、在当前目录解压缩 4、打开配置文件 vi /etc/profile 添加如下命令 ulimit -c unlimited 5、打开系统配置文件 vi /etc/sysctl.c…

redis 如何切换db

文章来源&#xff1a;http://www.ttlsa.com/redis/redis-database/ redis默认有db0~db15之多。 一台服务器上都快开启200个redis实例了&#xff0c;看着就崩溃了。这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开。 那么&#xff0c;redis有没有什么方法使不同…

PostgreSQL安装+TimescaleDB安装(Windows)

PostgreSQL安装TimescaleDB安装&#xff08;Windows&#xff09; 一、安装环境1.系统2.PostgreSQL安装包3.TimescaleDB安装包4.Visual Studio Community 2019 二、PostgreSQL安装1.安装PostgreSQL2.配置环境变量3.验证是否安装成功 三、TimescaleDB安装1.安装TimescaleDB2.验证…

springboot连接redis并动态切换database(db0到db15)

redis redis db0到db15springboot连接redis添加配置文件application.properties测试是否连接成功redis动态切换database redis db0到db15 可以理解为数据库表这是redis默认提供的16个表 我们可以把不同的数据存在不同的db上 取得时候可以在不同的db拿到不同类型数据 springb…

各种接口

一、DB9与DB25 九针串口 串口是计算机主要的外部接口之一&#xff0c;通过九针串口连接的设备有很多&#xff0c;像串口鼠标、MODEM、手写板等等&#xff0c;九针串口的示意图如上&#xff0c;其各脚的定义如下&#xff1a; 1 DCD 载波检测 2 RXD 接收数据 3 TXD 发送数据…

Altium designer--DB接口DB9/DB15/DB25/DB37/DB50

使用Altium designer软件绘制DB接口封装图如下所示&#xff1a; 具体获取方式见文末链接 &#xff08;1&#xff09;DB9针 &#xff08;2&#xff09;DB15针 &#xff08;3&#xff09;DB25针 &#xff08;4&#xff09;DB37针 &#xff08;5&#xff09;DB50针 AD封装库链接…

常用接口定义02——DB与DR系列端口

&#xfeff;&#xfeff; DB系列与DR系列端子是设计PCB时经常会遇到的&#xff0c;直到前两天才专门找时间总结了一下两个系列接口的区别并从淘宝上找到实物图与之对应。 DB系列&#xff1a; 1.DB9 2.DB15&#xff08;三排&#xff09; 母头尺寸图&#xff1a; 3.DB15&#x…

pixhawk罗盘校准进度条没有反应

可能还是得把GPS加上才能校准罗盘。 https://blog.csdn.net/LockeDr/article/details/89320593 https://wenku.baidu.com/view/1b5c56114a2fb4daa58da0116c175f0e7cd11968.html

电子罗盘详解之地磁场和航向角

地球本身具有磁性,所以地球和近地空间之间存在着磁场,叫做地磁场。地磁场的强度为0. 3 至0. 6 高斯,其大小和方向随地点(甚至随时间) 而异。地球本身具有磁性,所以地球和近地空间之间存在着磁场,叫做地磁场。地磁场的强度为0. 3 至0. 6 高斯,其大小和方向随地点(甚至随时间) 而…

倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

电子罗盘(2)&#xff1a;磁传感器的误差来源、硬磁干扰的校准&#xff08;3个参数&#xff09;、实验验证 文章目录 理想情况误差来源内部外部误差模型 硬磁干扰的校准&#xff08;3个参数&#xff09;使用的模型最小二乘法 实测结果总结代码和资料MATLAB代码参考资料样机 理想…

倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准

倾斜补偿的电子罗盘(3)&#xff1a;椭球拟合&#xff0c;磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源&#xff0c;并介绍了消除硬磁干扰的3参数校准。倾斜补偿的电子罗盘(2)&#xff1a;磁传感器的误差来源、硬磁干扰的校准&#xff08;3个参数&…

地磁传感器_磁感应计_电子罗盘(compass)原理

ref: http://www.360doc.com/content/14/0724/23/9152906_396847920.shtml https://wenku.baidu.com/view/8fcb6f94284ac850ad024244.html 原文链接&#xff1a;https://blog.csdn.net/weixin_43614541/article/details/104818380 1.利用旋转矩阵推导倾斜补偿公式 电子罗盘的…

电子罗盘全详解

目前, 导航系统在汽车、航海、航空等领域已经得到广泛的应用。电子罗盘是导航系统不可缺少的重要组成部分。 GPS导航定位的缺陷 1、虽然GPS在导航、定位、测速、定向方面有着广泛的应用&#xff0c;但由于其信号常被地形、地物遮挡&#xff0c;导致精度大大降低,其信号可用性仅…

电子罗盘详解之原理和特点

电子罗盘的原理 三维电子罗盘由三维磁阻传感器、双轴倾角传感器和MCU构成。 三维磁阻传感器用来测量地球磁场,倾角传感器是在磁力仪非水平状态时进行补偿;MCU处理磁力仪和倾角传感器的信号以及数据输出和软铁、硬铁补偿。 三维磁阻传感器采用三个互相垂直的磁阻传感器,每个…

大疆无人机飞行感知技术中各传感器作用

无人机的飞行感知技术主要有两个用途&#xff1a; 其一是提供给飞行控制系统&#xff0c;由于飞行控制系统的主要功能是控制飞机达到期望姿态和空间位置&#xff0c;所以这部分的感知技术主要测量飞机运动状态相关的物理量&#xff0c;涉及的模块包括陀螺仪、加速度计、磁罗盘、…

看完这个,让你分分钟搞定罗盘与加计校准!

看完这个&#xff0c;让你分分钟搞定罗盘与加计校准&#xff01; 罗盘和加计的校准是日常开发中最基础的工作&#xff0c;特邀Echo老师对罗盘和加速度计校准的工程方法进行总结&#xff0c;为小伙伴你们解惑&#xff0c;是有此文。 作者信息 Echo&#xff0c;本名邹佳池&…

android 磁场传感器 罗盘,Android开发获取重力加速度和磁场强度的方法

本文实例讲述了Android开发获取重力加速度和磁场强度的方法。分享给大家供大家参考,具体如下: Android获取重力加速度和磁场强度主要依靠: Sensor.getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) 输入数据: gravity为重力传感器测得的重…