达梦新云文档数据库是一款由我们独立研发、提供原厂技术支持服务、兼容MongoDB的分布式原生文档数据库产品。
其设计初衷是为了应对现代应用对高性能、高可靠、弹性伸缩、自主安全及适用于新兴软硬件平台的文档数据库需求。
DDM数据库具备以下特点:
达梦新云文档数据库是达梦公司独立研发的产品,简称DMDDM。
达梦公司对核心代码拥有完全自主知识产权,有效避免潜在的知识产权纠纷,
同时还能够提供本地化的原厂专业技术服务,包括电话/邮箱/QQ/微信/现场支持等多种服务方式。
由于掌握核心技术,研发团队还可根据用户业务需求提供定制化开发服务。
达梦新云文档数据库兼容主流软硬件平台,
如龙芯/X86/ARM等处理器,麒麟/UOS/openEuler/Redhat/Ubuntu等操作系统。
达梦新云文档数据库支持副本集主备部署和分布式集群部署,分布式集群部署支持计算/存储分离架构,
可根据业务负载在线灵活添加/删除计算节点/存储节点,可有效支持数据分片和负载均衡机制,实现系统数据容量和性能的线性伸缩。
达梦新云文档数据库支持主备集群和分布式集群部署方式,单个节点故障不影响整个系统的正常运行。
DMDDM由以下三个核心组件组成:
达梦新云文档数据库目前需要 AVX2 指令集才能正常工作,请保证 CPU 支持此指令集。通常 2011 年后的 CPU 均支持。
由于目前达梦新云文档数据库没有正式发布,需要联系达梦销售获取试用安装包。
安装包包括如下内容:
为了方便测试运行,所有进程都在一台主机,使用不同端口。进程规划如下:
首先启动 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 输出如下内容,表示已经正常启动服务:
这里我们选择使用 VSCode 官方插件来连接 ddm-engine:
连接成功后我们会看到连接列表中出现了刚才添加的实例:
我们使用插件自带的测试数据进行插入:
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') },
]);
插入成功之后返回的数据主键:
查询文档数据:
# 查询日期大于等于 2014-04-04 且小于 2014-04-05 的文档
db.getCollection("sales").find({
date: { $gte: new Date("2014-04-04"), $lt: new Date("2014-04-05") },
});
查询结果;
下面我们测试更复杂的聚合查询语句:
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"] } },
},
},
]);
查询结果:
./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 的存储节点,观察存储状态可以发现节点已经下线:
此时我们继续查询数据库,发现数据库可以正常执行命令且没有数据丢失:
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 }
);
查询结果:
文章
阅读量
获赞