MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Najlepszy sposób na przedstawienie wielojęzycznej bazy danych na mongodb

Możesz zaprojektować schemat, w którym możesz odwoływać się lub osadzać dokumenty. Spójrzmy na pierwszą opcję osadzonych dokumentów. W przypadku powyższej aplikacji możesz przechowywać informacje w dokumencie w następujący sposób:

// 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"
        }
    ]
}

W powyższym przykładowym schemacie zasadniczo osadziłbyś table1_lang informacje w głównej table1 dokument. Ten projekt ma swoje zalety, jedną z nich jest lokalizacja danych. Ponieważ MongoDB przechowuje dane na dysku w sposób ciągły, umieszczenie wszystkich potrzebnych danych w jednym dokumencie zapewnia, że ​​wirujące dyski będą potrzebowały mniej czasu na poszukiwanie określonej lokalizacji na dysku. Jeśli Twoja aplikacja często uzyskuje dostęp do table1 informacje wraz z table1_lang dane, wtedy prawie na pewno będziesz chciał skorzystać z wbudowanej trasy. Inną zaletą osadzonych dokumentów jest niepodzielność i izolacja w zapisie danych. Aby to zilustrować, powiedzmy, że chcesz usunąć dokument, który ma klucz lang "name" o wartości "foo", można to zrobić za pomocą jednej (atomowej) operacji:

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

Więcej informacji na temat modelowania danych w MongoDB można znaleźć w dokumentacji Wprowadzenie do modelowania danych , w szczególności Model Relacje jeden-do-wielu z osadzonymi dokumentami

Inną opcją projektowania jest odwoływanie się do dokumentów, w których stosujesz znormalizowany schemat. Na przykład:

// 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"
}

Powyższe podejście daje większą elastyczność w wykonywaniu zapytań. Na przykład, aby pobrać wszystkie potomne table1_lang dokumenty dla głównej jednostki nadrzędnej table1 z id 3 będzie proste, po prostu utwórz zapytanie względem kolekcji table1_lang :

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

Powyższy znormalizowany schemat wykorzystujący podejście odwołania do dokumentu ma również zaletę w przypadku relacji jeden-do-wielu o bardzo nieprzewidywalnej zmienności. Jeśli masz setki lub tysiące table_lang dokumenty na dany table osadzanie ma tak wiele niedogodności, jeśli chodzi o ograniczenia przestrzenne, ponieważ im większy dokument, tym więcej pamięci RAM wykorzystuje, a dokumenty MongoDB mają sztywny limit rozmiaru 16 MB.

Ogólna zasada jest taka, że ​​jeśli wzorzec zapytania aplikacji jest dobrze znany, a dostęp do danych jest zwykle możliwy tylko w jeden sposób, podejście osadzone działa dobrze. Jeśli Twoja aplikacja wysyła zapytania do danych na wiele sposobów lub nie możesz przewidzieć wzorców zapytań o dane, w takim przypadku odpowiedni będzie bardziej znormalizowany model odwoływania się do dokumentów.

Nr ref.:

MongoDB Zastosowane wzorce projektowe:praktyczne przypadki użycia z wiodącą bazą danych NoSQL autorstwa Ricka Copelanda




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Obejście MongoDB dla dokumentu o rozmiarze większym niż 16 MB?

  2. MongoDb c# driver znajduje element w tablicy według wartości pola

  3. Nowość w MongoDB Nie można uruchomić polecenia mongo

  4. Agregacja MongoDB przy użyciu oficjalnego sterownika C#?

  5. Czy MongoDB może działać, gdy rozmiar bazy danych jest większy niż RAM?