Vzhledem k vašim požadavkům na:
- A) Nízké využití paměti RAM
- B) Splnění omezení velikosti souboru v Mongo
- C) Responzivní uživatelské rozhraní
Zvažoval bych něco v následujícím smyslu.
Vezměte si tento příklad adresáře
C:\
C:\X\
C:\X\B\
C:\X\file.txt
C:\Y\
C:\Y\file.pdf
C:\Y\R\
C:\Y\R\file.js
V JSON by to mohlo být reprezentováno jako:
{
"C:": {
"X": {
"B": {},
"file.txt": "file information..."
},
"Y": {
"file.pdf": "file information...",
"R": {
"file.js": "file information..."
}
}
}
}
Ten, jak jste zdůraznil, se špatně škáluje s velkými adresářovými strukturami (z první ruky vám mohu říci, že prohlížeče neocení blob JSON představující i skromný adresář s několika tisíci soubory/složkami). První jmenovaný, i když je podobný některým skutečným souborovým systémům a je účinný ve správném kontextu, je obtížné pracovat s převodem do az JSON.
Můj návrh je rozdělit každý adresář do samostatného dokumentu JSON, protože to vyřeší všechny tři problémy, ale nic není zadarmo a zvýší se tím složitost kódu, počet požadavků na relaci atd.
Výše uvedená struktura by mohla být rozdělena do následujících dokumentů:
[
{
"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"
}
]
Kde každý dokument představuje adresář nebo soubor a (pokud je adresář) jeho bezprostřední podřízená ID. Podřízené položky mohou být líně načteny pomocí jejich ID a připojeny k jejich nadřazenému rozhraní v uživatelském rozhraní. Dobře implementované líné načítání může předběžně načíst podřízené uzly do požadované hloubky a vytvořit tak velmi citlivé uživatelské rozhraní. Využití RAM je minimální, protože váš server musí zvládnout pouze malé užitečné zatížení na požadavek. Počet požadavků se oproti přístupu s jedním dokumentem značně zvyšuje, ale opět, některé chytré líné načítání může shlukovat požadavky a snížit celkový počet.
AKTUALIZACE 1 :Nějak jsem před odpovědí přehlédl tvůj předposlední odstavec, takže tohle je asi víceméně to, co jsi měl na mysli. K vyřešení problému s příliš mnoha dokumenty může být v pořádku určitá úroveň uzlů shlukování v dokumentech. Musím teď vyrazit, ale trochu si to rozmyslím.
AKTUALIZACE 2 :Vytvořil jsem podstatu zjednodušené verze konceptu shlukování, který jsem zmínil. Nebere v úvahu soubory, pouze složky, a nezahrnuje a kód pro aktualizaci dokumentů. Doufám, že vám to dá nějaké nápady, budu to nadále aktualizovat pro své vlastní účely.
Podstata:tree_docs_cluster.js