注册
达梦文档数据库简介和安装使用
技术分享/ 文章详情 /

达梦文档数据库简介和安装使用

藤原妹红 2024/06/07 1827 0 0

达梦新云文档数据库是一款由我们独立研发、提供原厂技术支持服务、兼容MongoDB的分布式原生文档数据库产品。
其设计初衷是为了应对现代应用对高性能、高可靠、弹性伸缩、自主安全及适用于新兴软硬件平台的文档数据库需求。

DDM数据库具备以下特点:

自主原创

达梦新云文档数据库是达梦公司独立研发的产品,简称DMDDM。
达梦公司对核心代码拥有完全自主知识产权,有效避免潜在的知识产权纠纷,
同时还能够提供本地化的原厂专业技术服务,包括电话/邮箱/QQ/微信/现场支持等多种服务方式。
由于掌握核心技术,研发团队还可根据用户业务需求提供定制化开发服务。

兼容多硬件平台和系统

达梦新云文档数据库兼容主流软硬件平台,
如龙芯/X86/ARM等处理器,麒麟/UOS/openEuler/Redhat/Ubuntu等操作系统。

灵活的部署模式

达梦新云文档数据库支持副本集主备部署和分布式集群部署,分布式集群部署支持计算/存储分离架构,
可根据业务负载在线灵活添加/删除计算节点/存储节点,可有效支持数据分片和负载均衡机制,实现系统数据容量和性能的线性伸缩。

安全可靠

达梦新云文档数据库支持主备集群和分布式集群部署方式,单个节点故障不影响整个系统的正常运行。

安装流程

核心组件

DMDDM由以下三个核心组件组成:

  • DDM-Meta:用于存储数据库元数据和集群调度。支持单节点和分布式部署。
  • DDM-Store:负责存储实际的数据库数据,支持单节点和分布式部署。推荐使用SSD以获得最佳性能。
  • DDM-Engine:无状态的计算节点,负责接收数据库请求并进行响应。

准备环境和安装包

达梦新云文档数据库目前需要 AVX2 指令集才能正常工作,请保证 CPU 支持此指令集。通常 2011 年后的 CPU 均支持。
由于目前达梦新云文档数据库没有正式发布,需要联系达梦销售获取试用安装包。

安装包包括如下内容:

installpkg.png

  • bin 目录存放数据库的三个可执行文件、备份工具和安装脚本。

installpkgbin.png

  • conf 目录存放配置文件。

installpkgconf.png

  • log 目录存放运行日志。只有以服务方式启动后才会在这个目录产生日志。

运行数据库

为了方便测试运行,所有进程都在一台主机,使用不同端口。进程规划如下:

  • ddm-meta
    • meta.0: 2379/2380
  • ddm-store
    • store.0: 10180
    • store.1: 10280
    • store.2: 10380
    • store.3: 10480 模拟故障测试时加入集群
    • store.4: 10580 模拟故障测试时加入集群
  • ddm-engine
    • engine.0: 27017

首先启动 ddm-meta:

# --data-dir 参数指定存储目录 ./bin/ddm_meta --client-urls http://0.0.0.0:2379 --advertise-client-urls http://172.21.189.55:2379 --peer-urls http://172.21.189.55:2380 --data-dir meta.0

之后依次启动三个 ddm-store 节点:

# --data-dir 参数指定存储目录 ./bin/ddm_store -A 172.21.189.55:10180 --data-dir store.0 ./bin/ddm_store -A 172.21.189.55:10280 --data-dir store.1 ./bin/ddm_store -A 172.21.189.55:10380 --data-dir store.2

最后启动 ddm-engine:

./bin/ddm_engine -config conf/ddm_engine_config.toml

最终我们看到 ddm-engine 输出如下内容,表示已经正常启动服务:

ddmengine.png

使用

  1. 连接数据库

这里我们选择使用 VSCode 官方插件来连接 ddm-engine:

connection.png

连接成功后我们会看到连接列表中出现了刚才添加的实例:

instance.png

  1. 插入与查询数据

我们使用插件自带的测试数据进行插入:

use('mongodbVSCodePlaygroundDB'); db.getCollection('sales').insertMany([ { 'item': 'abc', 'price': 10, 'quantity': 2, 'date': new Date('2014-03-01T08:00:00Z') }, { 'item': 'jkl', 'price': 20, 'quantity': 1, 'date': new Date('2014-03-01T09:00:00Z') }, { 'item': 'xyz', 'price': 5, 'quantity': 10, 'date': new Date('2014-03-15T09:00:00Z') }, { 'item': 'xyz', 'price': 5, 'quantity': 20, 'date': new Date('2014-04-04T11:21:39.736Z') }, { 'item': 'abc', 'price': 10, 'quantity': 10, 'date': new Date('2014-04-04T21:23:13.331Z') }, { 'item': 'def', 'price': 7.5, 'quantity': 5, 'date': new Date('2015-06-04T05:08:13Z') }, { 'item': 'def', 'price': 7.5, 'quantity': 10, 'date': new Date('2015-09-10T08:43:00Z') }, { 'item': 'abc', 'price': 10, 'quantity': 5, 'date': new Date('2016-02-06T20:20:13Z') }, ]);

插入成功之后返回的数据主键:

insert.png

查询文档数据:

# 查询日期大于等于 2014-04-04 且小于 2014-04-05 的文档 db.getCollection("sales").find({ date: { $gte: new Date("2014-04-04"), $lt: new Date("2014-04-05") }, });

查询结果;

find.png

下面我们测试更复杂的聚合查询语句:

db.getCollection("sales").aggregate([ { # 查询日期大于等于 2014-01-01 且小于 2015-01-01 的文档 $match: { date: { $gte: new Date("2014-01-01"), $lt: new Date("2015-01-01") }, }, }, { # 分组聚合 $group: { # 使用 item 字段作为分组依据 _id: "$item", # 返回每个分组内所有文档价格乘以质量的总和 totalSaleAmount: { $sum: { $multiply: ["$price", "$quantity"] } }, }, }, ]);

查询结果:

aggr.png

模拟新增 ddm-store 节点

./bin/ddm_store -A 172.21.189.55:10480 --data-dir store.3 ./bin/ddm_store -A 172.21.189.55:10580 --data-dir store.4

模拟节点故障

我们使用 Ctrl-C 停止端口为 10180 和 10380 的存储节点,观察存储状态可以发现节点已经下线:

disconnected.png

此时我们继续查询数据库,发现数据库可以正常执行命令且没有数据丢失:

db.getCollection("sales").find( { date: { $gte: new Date("2014-01-01"), $lt: new Date("2015-01-01") } }, { _id: 0, item: 1, price: 1, quantity: 1 } );

查询结果:

querydisconnected.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服