MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tốt nhất để trình bày cơ sở dữ liệu đa ngôn ngữ trên mongodb

Bạn có thể thiết kế một lược đồ nơi bạn có thể tham khảo hoặc nhúng tài liệu. Hãy xem tùy chọn đầu tiên của các tài liệu nhúng. Với ứng dụng của bạn ở trên, bạn có thể lưu trữ thông tin trong một tài liệu như sau:

// db.table1 schema
{
    "_id": 3, // table1_id
    "is_active": true,
    "created": ISODate("2015-04-07T16:00:30.798Z"),
    "lang": [
        {
            "name": "foo",
            "surname": "bar",
            "address": "xxx"
        },
        {
            "name": "abc",
            "surname": "def",
            "address": "xyz"
        }
    ]
}

Trong lược đồ ví dụ ở trên, về cơ bản bạn đã nhúng table1_lang thông tin trong table1 chính tài liệu. Thiết kế này có giá trị của nó, một trong số chúng là định vị dữ liệu. Vì MongoDB lưu trữ dữ liệu liên tục trên đĩa, việc đưa tất cả dữ liệu bạn cần vào một tài liệu đảm bảo rằng các đĩa quay sẽ mất ít thời gian hơn để tìm kiếm một vị trí cụ thể trên đĩa. Nếu ứng dụng của bạn thường xuyên truy cập vào table1 thông tin cùng với table1_lang dữ liệu thì bạn gần như chắc chắn sẽ muốn đi theo lộ trình nhúng. Ưu điểm khác của tài liệu nhúng là tính nguyên tử và cô lập trong việc ghi dữ liệu. Để minh họa điều này, giả sử bạn muốn xóa tài liệu có khóa lang là "name" với giá trị "foo", điều này có thể được thực hiện bằng một thao tác (nguyên tử) duy nhất:

db.table.remove({"lang.name": "foo"});

Để biết thêm chi tiết về lập mô hình dữ liệu trong MongoDB, vui lòng đọc tài liệu Giới thiệu Mô hình Dữ liệu , cụ thể là Mô hình Mối quan hệ một-nhiều với tài liệu được nhúng

Tùy chọn thiết kế khác đang tham chiếu đến các tài liệu mà bạn tuân theo một lược đồ chuẩn hóa. Ví dụ:

// db.table1 schema
{
    "_id": 3
    "is_active": true
    "created": ISODate("2015-04-07T16:00:30.798Z")
}

// db.table1_lang schema
/*
1
*/
{
    "_id": 1,    
    "table1_id": 3,
    "name": "foo",
    "surname": "bar",
    "address": "xxx"
}
/*
2
*/
{
    "_id": 2,    
    "table1_id": 3,
    "name": "abc",
    "surname": "def",
    "address": "xyz"
}

Cách tiếp cận trên giúp tăng tính linh hoạt trong việc thực hiện các truy vấn. Ví dụ:để truy xuất tất cả table1_lang con tài liệu cho thực thể mẹ chính table1 với id 3 sẽ đơn giản, chỉ cần tạo một truy vấn đối với tập hợp table1_lang :

db.table1_lang.find({"table1_id": 3});

Lược đồ chuẩn hóa ở trên sử dụng cách tiếp cận tham chiếu tài liệu cũng có một lợi thế khi bạn có các mối quan hệ một-nhiều với độ hiếm rất khó đoán. Nếu bạn có hàng trăm hoặc hàng nghìn table_lang tài liệu cho mỗi table thực thể, việc nhúng có rất nhiều điểm trở ngại trong chừng mực có liên quan đến các ràng buộc không gian vì tài liệu càng lớn thì càng sử dụng nhiều RAM và tài liệu MongoDB có giới hạn kích thước cứng là 16MB.

Nguyên tắc chung là nếu mẫu truy vấn của ứng dụng của bạn nổi tiếng và dữ liệu có xu hướng chỉ được truy cập theo một cách, thì phương pháp tiếp cận nhúng sẽ hoạt động tốt. Nếu ứng dụng của bạn truy vấn dữ liệu theo nhiều cách hoặc bạn không thể đoán trước các mẫu truy vấn dữ liệu, thì một mô hình tham chiếu tài liệu chuẩn hóa hơn sẽ thích hợp cho trường hợp đó.

Tham khảo:

Mẫu thiết kế ứng dụng MongoDB:Các trường hợp sử dụng thực tế với cơ sở dữ liệu NoSQL hàng đầu của Rick Copeland




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Ánh xạ mảng lồng nhau trong hàm tổng hợp

  2. Mongo với java - tìm truy vấn với kích thước hàng loạt

  3. Lưu trữ cấu trúc phân cấp thư mục trong kho dữ liệu giá trị-khóa

  4. Hộ chiếu Facebook với JWT

  5. Sử dụng $ stdDevSamp hoặc $ stdDevPop với Spring Mongo