Kinh Nghiệm về Hướng dẫn thiết kế database mongodb Chi Tiết
Bạn đang tìm kiếm từ khóa Hướng dẫn thiết kế database mongodb được Update vào lúc : 2022-10-26 14:20:15 . Với phương châm chia sẻ Mẹo về trong nội dung bài viết một cách Chi Tiết Mới Nhất. Nếu sau khi tìm hiểu thêm nội dung bài viết vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.
Một số định nghĩa trước lúc đi sâu về MongoDB. Đây là một cross-platform, DB hướng documents với hiệu năng cao, hoàn toàn có thể phục vụ cho phong phú những khối mạng lưới hệ thống và thuận tiện và đơn thuần và giản dị để scale. Tư tưởng của MongoDB là thông qua khái niệm collection và document. Vì không tìm kiếm được từ tiếng việt hay ho hơn nên trong thời điểm tạm thời được cho phép mình không thay đổi những khái niệm tiếng anh của 2 thuật ngữ này.
Nội dung chính Show
- Một số xem xét khi thiết kế schema trong MongoDB
- MongoDB – Create/Drop Database
- MongoDB – Create/Drop Collection
- Kiểu tài liệu
- MongoDB – Document
- MongoDB – Projection
- MongoDB – Limit Records
- MongoDB – Sort Records
- MongoDB – Indexing
- MongoDB – Aggregation
- MongoDB – Replication
- MongoDB – Sharding
Database
Database là một container vật lý cho những collection. Mỗi DB được thiết lập cho riêng nó một list
những files khối mạng lưới hệ thống files. Một sever MongoDB đơn thường có nhiều DB.
Collection
Collection là một nhóm những documents của MongoDB. Nó tương tự với một table trong RDBMS. Một Collection tồn tại trong một cơ sở tài liệu duy nhất. Các collection ko tạo ra một schema. Documents trong collection hoàn toàn có thể có những fields rất khác nhau. Thông thường, toàn bộ những documents trong collections có mục tiêu khá giống nhau hoặc liên quan tới nhau
Document
Một document là một tập hợp những cặp key-value. Documents có schema động. Schema động nghĩa là documents trong cùng một collection tránh việc phải có cùng một nhóm những fields hay cấu trúc giống nhau, và những fields phổ cập trong những documents của collection hoàn toàn có thể chứa nhiều chủng loại tài liệu rất khác nhau.
Bảng dưới đây đã cho toàn bộ chúng ta biết quan hệ của những thuật ngữ RDBMS với MongoDB
Một số xem xét khi thiết kế schema trong MongoDB
Thiết kế schema nhờ vào yêu cầu của user
Kết hợp những object vào một trong những document nếu bạn sử dụng chúng với nhau.
Nếu không thì tách riêng hẳn nó ra (nhưng nên phải để ý quan tâm là sau này nó sẽ không còn phải joins).Duplicate tài liệu (nhưng có số lượng giới hạn) vì không khí đĩa là quá rẻ so với vận tốc xử lý.
joins khi write, không joins khi read.
Tối ưu schema cho hầu hết những case sử dụng thông thường
Tập hợp những nhóm phức tạp vào schema
Ví dụ :
Giả sử là một người tiêu dùng cần một thiết kế DB cho blog của anh ta và xem xét sự khác lạ schema
giữa RDMS và MongoDB. Web sẽ có được những yêu cầu sau :
- Mọi post có unique title, description và url.
- Mọi post hoàn toàn có thể có một hoặc nhiều tags.
- Mọi post có name của publisher và số rất nhiều người xem likes
- Mọi post có comments bới một user với name, message, data-time và likes.
- Mỗi postc hoàn toàn có thể có 0 hoặc nhiều comments.
Trong thiết kế schema của RDBMS toàn bộ chúng ta sẽ có được như sau về post và comments và tags.
While in MongoDB schema design will have one collection post and has the following structure:
Trong khi đó ở MongoDB schema, toàn bộ chúng ta sẽ có được thiết kế một collection post và có cấu trúc như sau :
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
user:’COMMENT_BY’,
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
,
user:’COMMENT_BY’,
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
]
Để show 1 post RDBMS nên phải join 3 bảng trong lúc MongoDB chỉ việc lấy ra từ một collections. Nói đến đây nhiều bạn để ý quan tâm đừng thần tượng MongoDB quá nhé. Tháng sau mình sẽ viết 1 bài về so
sánh hiệu năng với hàng triệu bản ghi giữa MySQL và NoSQL.
MongoDB – Create/Drop Database
Một số lệnh liên quan đến Database
use DATABASE_NAME
Ví dụ
>use duongdb
switched to db duongdb
Check đang sử dụng DB nào
>db
duongdb
show list những DB trong server.
>show dbs
local 0.78125GB
test 0.23012GB
DB của bạn vừa mới create ko có ở đây. bạn phải insert một documents về nó vào list.
>db.movie.insert(“name”:”tutorials point”)
>show dbs
local 0.78125GB
duongdb 0.23012GB
test 0.23012GB
Drop DB
db.dropDatabase()
MongoDB – Create/Drop Collection
Dưới đấy là syntax để tạo một Collection
db.createCollection(name, options)
name thì sẽ yêu cầu
phải là một string. Trong khi đó mục options thì chứa quá nhiều thông số về : capped, autoIndexID, size , max.
capped là một tập hợp những collection có size fixed và tự động hóa viết đề lên những entries cũ của nó khi chạm đến max size. Nếu bạn cho nó true thì bạn phải điền size với lại max
autoIndexID sẽ tự động hóa tạo một index trên biến _id field.s Mặc định giá trị này là false.
và syntax để drop một collection
db.COLLECTION_NAME.drop()
Ví dụ nhé :
>use test
switched to db test
>db.createCollection(“duongcollection”)
“ok” : 1
>show collections
duongcollection
system.indexes
>db.createCollection(“mycol”, capped : true, autoIndexID : true, size : 6142800, max : 10000 )
“ok” : 1
>
Trong MongoDB thì bạn
ko nhất thiết phải tạo collection. Bọn này sẽ tự động hóa tạo collection cho bạn khi bạn insert một documents.
>db.tutorialspoint.insert(“name” : “tutorialspoint”)
>show collections
mycol
mycollection
system.indexes
tutorialspoint
Đây là ví dụ drop
>use mydb
switched to db mydb
>show collections
mycol
mycollection
system.indexes
tutorialspoint
>db.mycollection.drop()
true
Kiểu tài liệu
- String: String trong MongoDB phải là UTF-8 hợp lệ.
- Integer: Số nguyên hoàn toàn có thể là 32 bit hoặc 64 bit tùy thuộc vào sever của bạn.
- Boolean
- Double
- Min/ Max keys: Loại này được sử dụng để so sánh giá trị riêng với những yếu tố thấp nhất và cao nhất BSON.
- Array
- Timestamp
- Object
- Null
- Symbol
- Date
- Object ID
- Binary data
- Code
- Regular expression
MongoDB – Document
Insert một Document>db.COLLECTION_NAME.insert(document)
Ví dụ
>db.mycol.insert(
_id: ObjectId(7df78ad8902c),
title: ‘MongoDB Overview’,
description: ‘MongoDB is no sql database’,
by: ‘tutorials point’,
url: ‘http://www.tutorialspoint.com’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 100
)
Nếu bạn muốn insert nhiều documents trong một lệnh, bạn cần cho array vào trong lệnh insert().
>db.post.insert([
title: ‘MongoDB Overview’,
description: ‘MongoDB is no sql database’,
by: ‘tutorials point’,
url: ‘http://www.tutorialspoint.com’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 100
,
title: ‘NoSQL Database’,
description: ‘NoSQL database doesn’t have tables’,
by: ‘tutorials point’,
url: ‘http://www.tutorialspoint.com’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 20,
comments: [
user:’user1′,
message: ‘My first comment’,
dateCreated: new Date(2013,11,10,2,35),
like: 0
]
])
Lệnh tìm kiếm
>db.COLLECTION_NAME.find()
Để hiện thể kết quả đẹp hơn. Bạn hoàn toàn có thể dùng thêm phương thức pretty()
>db.mycol.find().pretty()
“_id”: ObjectId(7df78ad8902c),
“title”: “MongoDB Overview”,
“description”: “MongoDB is no sql database”,
“by”: “tutorials point”,
“url”: “http://www.tutorialspoint.com”,
“tags”: [“mongodb”, “database”, “NoSQL”],
“likes”: “100”
>
Cách sử dụng find AND trong MongoDB
>db.mycol.find(key1:value1, key2:value2).pretty()
Cách sử dụng find OR
trong MongoDB
>db.mycol.find(
$or: [
key1: value1, key2:value2
]
).pretty()
Dưới đấy là một ví dụ sử dụng cả AND và OR trong MongoDB
>db.mycol.find(“likes”: $gt:10, $or: [“by”: “tutorials point”,
“title”: “MongoDB Overview”]).pretty()
“_id”: ObjectId(7df78ad8902c),
“title”: “MongoDB Overview”,
“description”: “MongoDB is no sql database”,
“by”: “tutorials point”,
“url”: “http://www.tutorialspoint.com”,
“tags”: [“mongodb”, “database”, “NoSQL”],
“likes”: “100”
>
Tiếp đến là lệnh UPDATE>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
Giá sử tài liệu ban đầu của bạn là như vậy này
“_id” : ObjectId(5983548781331adf45ec5), “title”:”MongoDB Overview”
“_id” : ObjectId(5983548781331adf45ec6), “title”:”NoSQL Overview”
“_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point Overview”
Sau khi chạy
>db.mycol.update(‘title’:’MongoDB Overview’,$set:’title’:’New MongoDB Tutorial’)
Bạn sẽ nhận được kết quả như sau
“_id” : ObjectId(5983548781331adf45ec5), “title”:”New MongoDB Tutorial”
“_id” : ObjectId(5983548781331adf45ec6), “title”:”NoSQL Overview”
“_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point Overview”
>
Bạn hoàn toàn có thể update nhiều documents bằng cach truyền một param ‘multi’ cho nó true
>db.mycol.update(‘title’:’MongoDB Overview’,
$set:’title’:’New MongoDB Tutorial’,multi:true)
Lệnh SAVE
Cú pháp của lệnh này như sau
>db.COLLECTION_NAME.save(_id:ObjectId(),NEW_DATA)
Dưới đấy là ví du
>db.mycol.save(
“_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point Overview”,
“by”:”Tutorials Point”
)
khi bạn chạy đoạn này phần tài liệu của documents
có ID 5983548781331adf45ec7 sẽ bị thay thế như sau
>db.mycol.find()
“_id” : ObjectId(5983548781331adf45ec5), “title”:”New MongoDB Tutorial
“_id” : ObjectId(5983548781331adf45ec6), “title”:”NoSQL Overview”
“_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point New Topic”,
“by”:”Tutorials Point”
>
Lệnh REMOVE
Lệnh này khá đơn thuần và giản dị. Các bạn tự tìm hiểu thêm nhé.
MongoDB – Projection
Trong mongodb, projection nghĩa là bạn chỉ việc chọn những tài liệu cần hthieets thay vì select hết mọi tài liệu của documents. Nó khác find trong find Collection ở đoạn là find thì tìm kiếm tài liệu document trong collection. Còn khía niệm này sẽ tìm kiếm kết quả fields trong documents. ví dụ bạn cần hiển thị 3 fields kết quả trong 5 fields
của một documents.
syntax của lệnh tìm kiếm này sẽ là
>db.COLLECTION_NAME.find(,KEY:1)
Ví dụ tài liệu hiện tại của bạn như sau :
“_id” : ObjectId(5983548781331adf45ec5), “title”:”MongoDB Overview”
“_id” : ObjectId(5983548781331adf45ec6), “title”:”NoSQL Overview”
“_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point Overview”
Bạn chỉ việc muốn hiển thị mỗi title thôi. Hãy làm như sau
>db.mycol.find(,”title”:1,_id:0)
“title”:”MongoDB Overview”
“title”:”NoSQL Overview”
“title”:”Tutorials Point Overview”
>
Rất đơn thuần và giản dị phải ko !
MongoDB – Limit Records
Để số lượng giới hạn số lượng records trong MongoDB, bạn sẽ dùng phương thức limit(). Limit() sẽ đồng ý số lượng record số lượng giới hạn thông qua argument mà bạn truyền vào. Nó sẽ thể hiện số lượng documents bạn muốn hiển thị.
>db.COLLECTION_NAME.find().limit(NUMBER)
Sử dụng ví dụ
ở Projection ở trên toàn bộ chúng ta có ví dụ sau
>db.mycol.find(,”title”:1,_id:0).limit(2)
“title”:”MongoDB Overview”
“title”:”NoSQL Overview”
>
Ngoài ra có lệnh skip() được cho phép bạn bỏ qua một giá trị document.
>db.mycol.find(,”title”:1,_id:0).limit(1).skip(1)
“title”:”NoSQL Overview”
>
MongoDB – Sort Records
Để sort những document trong MongoDB, bạn nên phải sử dụng sort(). sort() cho pehsp một document trong chứa những fields theo thứ tự order. có 2 loại thứ tự, 1 sẽ tương tự với ascending và -1 sẽ tương tự với descending.
>db.COLLECTION_NAME.find().sort(KEY:1)
MongoDB – Indexing
Index tương hỗ độ phân tích một cách hiệu suất cao những truy vấn. Nếu không còn chỉ
mục, MongoDB sẽ phải quét toàn bộ những documents của collection để lựa chọn ra những document phù phù thích hợp với câu truy vấn. Quá trình quét này là không hiệu suất cao và yêu cầu MongoDB để xử lý một khối lượng lớn tài liệu.
Index là những cấu trúc tài liệu đặc biệt quan trọng, dùng để chứa một phần nhỏ của những tập tài liệu một cách thuận tiện và đơn thuần và giản dị để quét. Chỉ số tàng trữ giá trị của một fields rõ ràng hoặc thiết lập những fields, sắp xếp theo giá trị của những fields này.
>db.COLLECTION_NAME.ensureIndex(KEY:1)
Để hoàn toàn có thể đánh số nhiều fields, bạn hãy dùng
ensureIndex()
>db.mycol.ensureIndex(“title”:1,”description”:-1)
Ở đây giá trị 1 và -1 là thể hiện thứ tự sắp xếp index. ensureIndex() có quá nhiều tham số để bạn hoàn toàn có thể tùy chỉnh.
MongoDB – Aggregation
Aggregation xử ly những record tài liệu va trả về kết quả đã tính toán rồi. Aggregation sẽ group giá trị từ nhiều documents rất khác nhau và hoàn toàn có thể tiến hành xử lý thật nhiều nhóm dư liệu để trả về một kết quả đơn lẻ. Xử lý này tương tự với count(*) trong SQL.
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Ví dụ toàn bộ chúng ta có tài liệu như vậy này.
_id: ObjectId(7df78ad8902c)
title: ‘MongoDB Overview’,
description: ‘MongoDB is no sql database’,
by_user: ‘tutorials point’,
url: ‘http://www.tutorialspoint.com’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 100
,
_id: ObjectId(7df78ad8902d)
title: ‘NoSQL Overview’,
description: ‘No sql database is very fast’,
by_user: ‘tutorials point’,
url: ‘http://www.tutorialspoint.com’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 10
,
_id: ObjectId(7df78ad8902e)
title: ‘Neo4j Overview’,
description: ‘Neo4j is no sql database’,
by_user: ‘Neo4j’,
url: ‘http://www.neo4j.com’,
tags: [‘neo4j’, ‘database’, ‘NoSQL’],
likes: 750
,
Nếu bạn muốn hiển thị có bao nhiêu tutorial được viết bởi mỗi user bạn sẽ sử dụng aggregate() như sau :
> db.mycol.aggregate([$group : _id : “$by_user”, num_tutorial : $sum : 1])
“result” : [
“_id” : “tutorials point”,
“num_tutorial” : 2
,
“_id” : “Neo4j”,
“num_tutorial” : 1
],
“ok” : 1
>
Tương ứng với câu truy vấn trên trong SQL sẽ là select by_user, count(*) from mycol group by by_user. Trong ví dụ ở trên, toàn bộ chúng ta đã group những documents bới fields by_user và tiếp theo đó trên mỗi lần xả ra by_user giá trị tổng được tăng thêm.
Khái niệm về PIPELINE
Trong những lệnh shell UNIX, pipeline có ý nghĩa kĩ năng để thực thi một xử lý trên một vài input và sử dụng những outpust như thể input cho lệnh toeeps
theo. MongoDB cũng tương hỗ khái niệm tương tự trong framework aggregation. Sẽ có một tập hợp những stage hoàn toàn có thể xẩy ra và mỗi stage được ghi lại bằng môt nhóm những documents như thể input và tính toán ra kết quả của nhóm documents đó. Kết quả nà hoàn toàn có thể sẽ tiến hành chuyển thành input sử dụng cho stage tiếp theo đó.
Bài viết sau mình sẽ viết tiếp về những yếu tố nâng cao hơn của MongoDB.
MongoDB – Replication
Replication là khái niệm đồng điệu hóa tài liệu trên nhiều server. REplication sẽ
phục vụ thật nhiều và tăng tính sẵn sàng của data với nhiều bản copy tài liệu trên nhiều server DB, replications bảo vê DB khỏi việc mất tài liệu trên 1 server đơn lẻ. Relication cũng khá được cho phép bạn hoàn toàn có thể Phục hồi tài liệu từ những ổ cứng bị lỗi và việc service bị lỗi hay gặp yếu tố. Với rất nheieuf những copy tài liệu, bạn hoàn toàn có thể tinh chỉnh môt bản cho việc Phục hồi, report hoặc backup.
Tại sao lại cần REPLICATION
- Dữ data bảo vệ an toàn và uy tín
- Tạo tính sẵn sàng 24/7 cho tài liệu
- Khôi
phục dư liệu khỏi lỗi - Không có downtime khi xẩy ra maintenance.
- Tăng kĩ năng read tài liệu
- Replica setting không ảnh hưởng đến ứng dung
REPILCATION hoạt động và sinh hoạt giải trí ra làm sao trong MongoDB
MongoDB lưu trử replication bằng việc sử dụng tập hợp repica. Một tập hơp replica đó đó là một group những instance mongodb mà có host cung chung tập hợp tài liệu. Tất cả những instance khác, thứ hai sẽ tiến hành apply xử lý từ instance primary nên nó sẽ có được chung tập hợp dữ
liệu. Replica chỉ có duy nhất một node primary chính.
- Replica là một tâp hợp 2 hoặc nhiều nodes
- Trong tập hợp replica, một node là node chính và phần còn sót lại là nốt thứ hai
- Tất cả những tài liệu được replicates từ node chính sang những node phụ
- Tại thuở nào điểm nào tự động hóa maintenance, sẽ có được một “cuộc bầu cử ” được thiết lập lại để lựa chọn ra node chính mới.
- Sau một lần recovery một node bị lỗi, nó sẽ join lại nhóm replica và thao tác như một nốt phụ tiếp.
MongoDB – Sharding
Sharding là quy trình xử lý lưu trử tài liệu record trên nhiều máy và đấy là cách tiếp cận của MongoDB để hoàn toàn có thể thỏa mãn nhu cầu những yêu cầu về big data. Khi size của tài liệu ngày càng tăng, một máy tính đơn lẻ ko thể đủ để lưu tài liệu cũng như phục vụ những xử lý read và write thông thường. Sharding xử lý và xử lý bài toán này bằng phương pháp scale lên theo chiều ngang. VỚi
sharding, bạn hoàn toàn có thể sẽ add thêm machines để tương hỗ tàng trữ tài liệu cũng như những yêu cầu về đọc và viết.
Tại sao lại cần Sharding
- Trong replication toàn bộ writes sẽ tiến hành tiến hành ở node master
- Các câu truy vấn trên master có một chút ít độ trễ
- Một tập hợp replica có số lượng giới hạn 12 nodes
- Bộ nhớ không thể đủ lớn khi thao tác với big data
- Local disk không đủ lớn
- Scale dọc quá tốn tiền
Sharding in MongoDB
Đây là quy mô
sharding trong MongoDB
- Shards : Shards được sử dụng để tàng trữ tài liệu. Chúng phục vụ những tài liệu với tính ổn định và sẵn sàng cao. Trong môi trường tự nhiên vạn vật thiên nhiên production, shard đó đó là một nhóm những replica riêng rẽ.
- Config Servers : Config Servers lưu dứ liệu metadata trong cluster. Dữ liệu chứa những thông tin về map dữa nhóm tài liệu với những shards. Mỗi query router sẽ dụng metadata
để khuynh hướng những xử lý đến những sharding rõ ràng. Trong môi trường tự nhiên vạn vật thiên nhiên production, nhóm shard sẽ có được 3 config server. - Query Routes : Query Routes về cơ bản là những instance của mongos, tiếp xúc với ứng dụng cliens và chỉ định những xử lý đến shard tương ứng. Query Router xử lý và nhắm đến những shards và trả về kết quả cho clients. Một nhóm những shard hoàn toàn có thể chưa nhiều hơn nữa một query router để phân loại tải request. Một Clients send request đến một query router. Nhìn chung thì một nhóm những sharded
sẽ có được nhiều query router.
Nguồn : http://www.tutorialspoint.com/
Tải thêm tài liệu liên quan đến nội dung bài viết Hướng dẫn thiết kế database mongodb
programming
mongodb
Download MongoDB
Design database MongoDB
Reply
5
0
Chia sẻ
Share Link Down Hướng dẫn thiết kế database mongodb miễn phí
Bạn vừa Read Post Với Một số hướng dẫn một cách rõ ràng hơn về Review Hướng dẫn thiết kế database mongodb tiên tiến và phát triển nhất và Share Link Cập nhật Hướng dẫn thiết kế database mongodb miễn phí.
Hỏi đáp vướng mắc về Hướng dẫn thiết kế database mongodb
Nếu sau khi đọc nội dung bài viết Hướng dẫn thiết kế database mongodb vẫn chưa hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Admin lý giải và hướng dẫn lại nha
#Hướng #dẫn #thiết #kế #database #mongodb