MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menyimpan pohon direktori dalam dalam database

Mengingat persyaratan Anda:

  • A) Penggunaan RAM rendah
  • B) Memenuhi batasan ukuran file di Mongo
  • C) UI yang responsif

Saya akan mempertimbangkan sesuatu di sepanjang baris berikut.

Ambil contoh direktori ini

C:\
C:\X\
C:\X\B\
C:\X\file.txt
C:\Y\
C:\Y\file.pdf
C:\Y\R\
C:\Y\R\file.js

Dalam JSON mungkin bisa direpresentasikan sebagai:

{
    "C:": {
        "X": {
            "B": {},
            "file.txt": "file information..."
        },
        "Y": {
            "file.pdf": "file information...",
            "R": {
                "file.js": "file information..."
            }
        }
    }
}

Yang terakhir, seperti yang Anda tunjukkan, tidak berskala dengan baik dengan struktur direktori besar (saya dapat memberi tahu Anda secara langsung bahwa browser tidak akan menghargai gumpalan JSON yang mewakili bahkan direktori sederhana dengan beberapa ribu file/folder). Yang pertama, meskipun mirip dengan beberapa sistem file aktual dan efisien dalam konteks yang tepat, sulit untuk bekerja dengan mengonversi ke dan dari JSON.

Proposal saya adalah memecah setiap direktori menjadi dokumen JSON terpisah, karena ini akan mengatasi ketiga masalah tersebut, namun tidak ada yang gratis, dan ini akan meningkatkan kompleksitas kode, jumlah permintaan per sesi, dll.

Struktur di atas dapat dipecah menjadi dokumen-dokumen berikut:

[
    {
        "id": "00000000-0000-0000-0000-000000000000",
        "type": "d",
        "name": "C:",
        "children": [
            "11111111-1111-1111-1111-111111111111",
            "22222222-2222-2222-2222-222222222222"
        ]
    },
    {
        "id": "11111111-1111-1111-1111-111111111111",
        "type": "d",
        "name": "X",
        "children": [
            "33333333-3333-3333-3333-333333333333",
            "55555555-5555-5555-5555-555555555555"
        ]
    },
    {
        "id": "22222222-2222-2222-2222-222222222222",
        "type": "d",
        "name": "Y",
        "children": [
            "44444444-4444-4444-4444-444444444444",
            "66666666-6666-6666-6666-666666666666"
        ]
    },
    {
        "id": "33333333-3333-3333-3333-333333333333",
        "type": "d",
        "name": "B",
        "children": []
    },
    {
        "id": "44444444-4444-4444-4444-444444444444",
        "type": "d",
        "name": "R",
        "children": [
            "77777777-7777-7777-7777-777777777777"
        ]
    },
    {
        "id": "55555555-5555-5555-5555-555555555555",
        "type": "f",
        "name": "file.txt",
        "size": "1024"
    },
    {
        "id": "66666666-6666-6666-6666-666666666666",
        "type": "f",
        "name": "file.pdf",
        "size": "2048"
    },
    {
        "id": "77777777-7777-7777-7777-777777777777",
        "type": "f",
        "name": "file.js",
        "size": "2048"
    }
]

Di mana setiap dokumen mewakili direktori atau file dan (jika direktori) ID turunan langsungnya. Item turunan dapat dimuat dengan lambat menggunakan ID-nya dan ditambahkan ke induknya di UI. Pemuatan malas yang diterapkan dengan baik dapat memuat node anak sebelumnya ke kedalaman yang diinginkan, menciptakan UI yang sangat responsif. Penggunaan RAM minimal karena server Anda hanya perlu menangani muatan kecil per permintaan. Jumlah permintaan memang meningkat secara signifikan dibandingkan dengan pendekatan dokumen tunggal, tetapi sekali lagi, beberapa pemuatan lambat yang cerdik dapat mengelompokkan permintaan dan mengurangi jumlah total.

PERBARUI 1 :Saya entah bagaimana mengabaikan paragraf terakhir kedua Anda sebelum menjawab, jadi ini mungkin kurang lebih apa yang ada dalam pikiran Anda. Untuk mengatasi masalah terlalu banyak dokumen, beberapa tingkat node pengelompokan dalam dokumen mungkin perlu dilakukan. Saya harus pergi sekarang, tetapi saya akan memikirkannya.

PERBARUI 2 :Saya telah membuat intisari dari versi sederhana dari konsep pengelompokan yang saya sebutkan. Itu tidak memperhitungkan file akun, hanya folder, dan tidak termasuk dan kode untuk memperbarui dokumen. Semoga bisa memberi Anda beberapa ide, saya akan terus memperbaruinya untuk tujuan saya sendiri.

Inti:tree_docs_cluster.js




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cara mendefinisikan lokasi dalam entitas menggunakan mongodb

  2. Untuk membiarkan, tidak bertambah jika ada item yang sama dalam array

  3. Kesalahan Mesin Django MongoDB saat menjalankan tellsiteid

  4. Bagaimana cara menangkap MongoSecurityException?

  5. Masalah dengan akses ke Mongodb di Amazon EC2