首页 > 数据库 >MongoDB

MongoDB

时间:2023-08-14 10:56:40浏览次数:52  
标签:MongoDB 分片 var 服务器 数据 节点

MongoDB

MongoDB是一个开源的,跨平台的文档数据库管理系统,它属于NoSQL的一种,旨在满足现代应用程序对灵活性,可拓展性和高性能的需求,MongoDB支持面向文档的数据存储模型,使开发人员能够以更自然的方式存储和查询数据,而无需遵循传统的关系型数据库结构。

以下是MongoDB的一些重要特点和优势:

1)文档存储模型:MongoDB使用BSON(Binary JSON)格式存储数据,每个文档可以是一个独立的数据结构,类似于JSON对象。这种文档存储模型适合存储复杂,多样化的数据,并且能够轻松拓展和调整数据结构。

2)灵活的模式设计:与传统的关系型数据库不同,MongoDB不要求预先定义表结构,可以根据需求动态定义字段和结构,从而实现更灵活的数据模式设计。

5)支持地理空间数据

6)自动分片和负载均衡:MongoDB提供了自动数据分片和负载均衡的功能,可以平衡数据在多个服务器之间分布,提高性能和可拓展性。

分布式拓展性,是指一个系统或应用程序能够有效地在多台服务器上进行部署,并且能够随着负载的增加而扩展,以保持高性能和可用性,只是一种处理大规模数据和高并发请求的能力,旨在不断满足增长的用户需求和数据处理要求。

具体的分布式拓展涉及以下几个方面:

1)水平拓展性:水平拓展性是指通过增加服务器的数量来扩展系统的能力,而不是通过增强单个服务器的性能,每台服务器都可以处理部分负载,从而实现系统的整体性能提升,这种方式适用于处理大量请求或存储海量数据的场景。

2)负载均衡:在分布式系统中,负载均衡是一种策略,通过将请求分发到不同的服务器上,确保每台服务器都能够平均分担负载,这有助于服务器过载,同时提高系统的性能和稳定性。

3)数据分片:数据分片是一种将数据分割成多个片段并分别存储在不同的服务器上的方法,这样可以提高数据库存储和查询的效率,并允许系统护理更大的数据量。

4)无中心架构:分布式拓展性通常采用无中心或分散的架构,每个节点都可以独立地处理请求或存储数据,这种架构有助于提高系统的可用性和容错性,因为一个节点的故障不会影响整个系统。

5)弹性伸缩:弹性伸缩是指系统可以根据需求自动地增加或减少资源,以适应不断变化的负载,这可以通过自动化工具和策略进行实现,从而使系统在高负载和低负载时都能保持高性能。

MongoDB实现了自动分片的功能,使得数据在分片集群中自动平衡分布,从而实现弹性伸缩和高性能,自动分片是MongoDB的一个核心特性,它可以帮助应对大规模数据和高并发访问的需求。

在MongoDB中,自动分片设计了以下几个关键概念

1)分片键:分片键是一个字段或字段组合,用于确定数据在哪个分片中存储。分片键的选择很重要,它能够保持数据的均衡分布,避免热点数据问题。

2)分片集群:分片集群由多个分片服务器组成,每个分片服务器存储数据的一部分。分片集群还包括一个或多个路由器,能够将客户端的亲求路由到合适的分片。

3)分片配置服务器:分片配置服务器存储了分片集群的元数据和配置信息包括包括分片建范围,分片服务器位置等。

4)分片片段:数据根据分片键划分为多个片段,每个片段称为一个分片片段,他存储在一个具体的分片服务器上。

MongoDB的自动分片过程如下

1)配置分片集群:启动分片服务器和分片配置服务器,设置分片键和其他配置信息。

2)添加分片服务器:将分片服务器添加到分片集群中,是的集群规模可以拓展。

3)插入数据:当数据被插入到集合中时,MongoDB会根据分片键将数据划分成为多个片段,并将它们分布在不同的分片服务器上。

4)自动迁移:MongoDB会自动检测数据的分布情况,如果发现某个分片服务器负载过高或者数据不均衡,就会触发自动数据迁移,将数据从一个分片迁移到另一个分片,以实现负载均衡

总之,MongoDB的自动分片功能使得数据的水平拓展变得个更加容易,能够实现高性能高可用性和弹性伸缩

MongoDB可以通过数据副本集来实现数据的冗余存储,从而提供高可用性和容错性,数据副本集是MongoDB的一种配置,他包括多个数据库副本,其中一个是主节点,其余是从节点

每个数据集的主要特点包括:

1)主节点:主节点负责处理数据的所有写操作,并将写入操作同步到从节点,客户端可以向主节点发起写请求

2)从节点:从节点通过复制主节点的数据来实现数据的冗余存储,从节点不处理写操作,但是可以处理读请求,从而分担主节点的读负载

3)自动故障转移:如果主节点发生故障,MongoDB可以从读节点中选举出一个新的主节点,从而实现自动故障转移

4)数据同步:从节点会定期从主节点同步数据,确保数据副本和主节点的数据保持一致

5)数据容易:由于数据被复制到多个从节点,因此即使主节点发生故障,数据仍然可以在从节点上访问,从而提供数据冗余

使用 MongoDB.Driver 操作 MongoDB 数据库 CRUD 操作示例

准备工作

  1. 确保你的项目已经安装了 MongoDB.Driver 包。

1. 创建实体类

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

public class Student
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }

    public string Name { get; set; }
    public int Age { get; set; }
}

2. 连接到 MongoDB 数据库

using MongoDB.Driver;

public class MongoDbContext
{
    private readonly IMongoDatabase _database;

    public MongoDbContext(string connectionString, string databaseName)
    {
        var client = new MongoClient(connectionString);
        _database = client.GetDatabase(databaseName);
    }

    public IMongoCollection<Student> Students => _database.GetCollection<Student>("students");
}

3. 添加、查询、更新和删除操作

添加数据

var dbContext = new MongoDbContext("mongodb://localhost:27017", "your_database_name");
var documents = new Student[]
        {
            new Student {  Name="Alice",Age=22},
            new Student  { Name="Bob",Age=25 },
            new  Student {  Name="Eve",Age=23 }
        };
dbContext.Students.InsertMany(documents);
var newStudent = new Student { Name = "John Doe", Age = 20 };
dbContext.Students.InsertOne(newStudent);

查询数据

var dbContext = new MongoDbContext("mongodb://localhost:27017", "your_database_name");

var student = dbContext.Students.Find(s => s.Name == "John Doe").FirstOrDefault();
if (student != null)
{
    Console.WriteLine($"Student found - Name: {student.Name}, Age: {student.Age}");
}

var allStudents = dbContext.Students.Find(_ => true).ToList();
foreach (var s in allStudents)
{
    Console.WriteLine($"Name: {s.Name}, Age: {s.Age}");
}

var filterBuilder = Builders<Student>.Filter;
var filter = filterBuilder.Empty;
filter &= filterBuilder.Gt(student => student.Age, 10);
var projection = Builders<Student>.Projection.Include(student => student.Name);
var query = dbContext.Students.Find(filter).Project(projection).FirstOrDefault();
var querys = dbContext.Students.Find(filter).ToList();

更新数据

var dbContext = new MongoDbContext("mongodb://localhost:27017", "your_database_name");

var studentToUpdate = dbContext.Students.Find(s => s.Name == "John Doe").FirstOrDefault();
if (studentToUpdate != null)
{
    studentToUpdate.Age = 21;
    dbContext.Students.ReplaceOne(s => s.Id == studentToUpdate.Id, studentToUpdate);
}

删除数据

var dbContext = new MongoDbContext("mongodb://localhost:27017", "your_database_name");

var studentToDelete = dbContext.Students.Find(s => s.Name == "John Doe").FirstOrDefault();
if (studentToDelete != null)
{
    dbContext.Students.DeleteOne(s => s.Id == studentToDelete.Id);
}

标签:MongoDB,分片,var,服务器,数据,节点
From: https://www.cnblogs.com/cooooooooookie/p/17628040.html

相关文章

  • 使用 Docker 部署 Mongodb
    Mongodb是最像关系型数据库的NoSql数据库,其数据类型非常丰富,数据结构松散,采用类似Json的Bson二进制格式存储数据,还支持对索引功能。主要应用在数据量大、读多写少或者读写都比较频繁、数据价值较低的场景中,如果社交平台的点赞和评论、游戏、物流信息和轨迹存储等。由于在......
  • 通过python的pymongo连接MongoDB数据库最新方式
    首先导入需要的模块功能fromurllibimportparsefrompymongoimportMongoClient使用pymongo的客户端进行链接self.host="168.9.5.27"self.port=27017self.user="Mr.baba"self.password="PLA_No.1"......
  • mongoDB 入门指南、示例
    一、准备工作1、下载mongoDB下载地址:http://www.mongodb.org/downloads选择合适你的版本相关文档:http://www.mongodb.org/display/DOCS/Tutorial2、安装mongoDBA、不解压模式:将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径......
  • MongoDB索引操作和执行计划Explain()详解
    一、索引操作说明,下面的内容举例时,以"dailyTrip"collection为例。字段内容如下:{"_id":ObjectId("63ec5a971ddbe429cbeeffe3"),//objectid"car_type":"Gett",//string"date":ISODate("2016-04-01T0......
  • centos 安装下载mongodb数据库
    mongodb下载安装官网:https://www.mongodb.com/try/download/communitytar-zxvfmongodb-linux-x86_64-rhel70-4.4.17.tgzmvmongodb-linux-x86_64-rhel70-4.4.17/usr/local/mvmongodb-linux-x86_64-rhel70-4.4.17/mongodbcd/usr/local/mongodbmkdirdatalogscd......
  • Mongodb Write Concern
    写关注点描述了MongoDB对独立mongod、副本集或分片集群进行写操作时请求的确认级别。在分片集群中,mongos实例将写关注点传递给分片。对于多文档事务,可以在事务级别设置写关注点,而不是在单个操作级别。不要显式地为事务中的各个写操作设置写关注点。从MongoDB4.4开始,副本集和分片集......
  • 链接Mongodb报错Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1
    解决方案在连接数据库字符串后面添加authSource=admin  "MongoDB":{"Host":"mongodb://touchadmin:[email protected]:27017/TouchAdmin?authSource=admin","DbName":"TouchAdmin"} useTouchAdmindb.cre......
  • 何时使用MongoDB而不是MySql
    什么是MySQL和MongoDBMySQL和MongoDB是两个可用于存储和管理数据的数据库管理系统。MySQL是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB以更灵活的格式将数据存储为JSON文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。My......
  • MongoDB 位置查询报错 planner returned error: unable to find index for $geoNear q
     执行查询语句,使用 $nearSphere/***1千米=0.6213712英里15千米=9.3205679英里查询通过除以地球的大约赤道半径(3963.2英里)将距离转换为弧度。*①:如果是第一页,查询50公里内的老朋友店铺,*②:查询15公里内所以的置顶服务商家,然后根据分页参数来截取*③:0.0015678......
  • mongodb副本集模式的单机修改ip(update方式)
    环境:OS:Centos7mongodb:4.4.22 1.停掉当前运行的mongodb/usr/local/services/mongodb/bin/mongolocalhost:29001useadmindb.shutdownServer() 2.网络层面修改ip地址[root@localhostnetwork-scripts]#servicenetworkrestart 3.修改参数修改配置文件,注释掉副本集......