
Бастамас бұрын мен кетуім керек сондықтан біз нақты не туралы айтып жатқанымыз анық болады.
Бұл мақалада мен файлдарды сақтауға жауапты қабатты және оны кез келген адам қалай пайдалануға болатынын қарастырғым келеді. , музыкамен тікелей байланысы жоқ. Кез келген файлдарды сақтауды ұйымдастыруға болады.
Алдыңғы мақалада мен «баррельді» аздап айналдырдым ipfs, бірақ бұл дәл мен шешіп жатқан мәселенің контекстінде болды. Жалпы, бұл жоба керемет деп ойлаймын. Мен әртүрлі тапсырмалар үшін әртүрлі желілерді жасау мүмкіндігін ғана қалаймын. Бұл құрылымды жақсырақ ұйымдастыруға және жеке түйіндерге және тұтастай желіге жүктемені азайтуға мүмкіндік береді. Тіпті бір жоба аясында, егер қажет болса, жалпы жүктемені азайта отырып, желіні кейбір критерийлер бойынша бөліктерге бөлуге болады.
Осылайша, storacle механизмді пайдаланады желіні ұйымдастыруға арналған. Басты ерекшеліктер:
- Файлдарды репозиторийге кез келген түйін арқылы қосуға болады.
- Файлдар блоктарда емес, толығымен сақталады.
- Әр файлда одан әрі жұмыс істеу үшін өзінің бірегей мазмұн хэші болады.
- Жоғары сенімділік үшін файлдарды көшіруге болады
- Бір түйіндегі файлдардың саны тек файлдық жүйемен шектеледі (ерекшелік бар, төменде толығырақ)
- Желідегі файлдардың саны желідегі жарамды түйіндер санына сәйкес таралатын мүмкіндіктермен шектеледі, екінші нұсқада түйіндердің шексіз санымен жұмыс істей алады (бұл туралы толығырақ басқа мақалада)
Бұл әдетте бағдарламадан қалай жұмыс істейтінінің қарапайым мысалы:
Сервер:
const Node = require('storacle').Node;
(async () => {
try {
const node = new Node({
port: 4000,
hostname: 'localhost'
});
await node.init();
}
catch(err) {
console.error(err.stack);
process.exit(1);
}
})();Клиент:
const Client = require('storacle').Client;
(async () => {
try {
const client = new Client({
address: 'localhost:4000'
});
await client.init();
const hash = await client.storeFile('./my-file');
const link = await client.getFileLink(hash);
await client.removeFile(hash);
}
catch(err) {
console.error(err.stack);
process.exit(1);
}
})();Ішкі көрініс
Сорғыштың астында әдемі ештеңе жоқ. Файлдар саны, олардың жалпы өлшемі және басқа нүктелері туралы ақпарат жадтағы дерекқорда сақталады және файлдар жойылған және қосылған кезде жаңартылады, сондықтан файлдық жүйеге жиі кірудің қажеті жоқ. Ерекшелік - белгілі бір жад өлшеміне жеткенде файлдарды айналдыру қажет болғанда қоқыс жинаушыны қосу және жаңаларын қосуға тыйым салу. Бұл жағдайда сіз жадты айналып өтуіңіз керек және файлдардың үлкен санымен (> миллионды айтамыз) жұмыс айтарлықтай жүктемелерге әкелуі мүмкін. Аз файлдарды сақтап, көбірек түйіндерді іске қосқан дұрыс. Егер «тазартқыш» өшірілген болса, онда мұндай мәселе болмайды.
Файл қоймасы 256 қалтадан және ұя салудың 2 деңгейінен тұрады. Файлдар екінші деңгейлі қалталарда сақталады. Яғни, 1 миллион болса. Әрбір осындай қалтада шамамен 62500 1000000 файл болады (256 XNUMX XNUMX / sqrt(XNUMX)).
Қалта атаулары файл хэшінен жасалған, сондықтан хэшті білсеңіз, оған жылдам қол жеткізе аласыз.
Бұл құрылым әртүрлі сақтау талаптарының үлкен саны негізінде таңдалды: әлсіз файлдық жүйелерді қолдау, мұнда бір қалтада көптеген файлдар болуы қажет емес, қажет болған жағдайда барлық қалталарды жылдам өту және т.б. Қандай да бір алтын орта.
кэштеу
Файлдарды қосу кезінде, сондай-ақ оларды қабылдау кезінде файлдарға сілтемелер кэшке жазылады.
Осының арқасында файлды іздеуде бүкіл желіні айналып өтудің қажеті жоқ. Бұл сілтемелерді алуды тездетеді және желідегі жүктемені азайтады. Кэштеу http тақырыптары арқылы да орын алады.
Изоморфия
Клиент javascript тілінде жазылған және изоморфты, оны браузерден тікелей пайдалануға болады.
Файлды жүктеп салуға болады сценарий және қол жеткізу ретінде window.ClientStoracle немесе құрастыру жүйесі арқылы импорттау және т.б.
Кейінге қалдырылған сілтемелер
Қызықты мүмкіндік - бұл «кейінге қалдырылған анықтама». Бұл синхронды түрде осы жерде және қазір алуға болатын файлға сілтеме және файл жадта табылған кезде шығарылады. Бұл, мысалы, сайтта кейбір суреттерді көрсету қажет болғанда өте ыңғайлы. Біз жай ғана src ішіне кейінге қалдырылған сілтемені қойдық және бәрі де солай. Сіз көптеген жағдайларды ойлап таба аласыз.
Клиент API
- асинх Client.prototype.storeFile() - файлды сақтау
- асинх Client.prototype.getFileLink() — файлға тікелей сілтеме алу
- асинх Client.prototype.getFileLinks() — файлға ол бар барлық түйіндерден тікелей сілтемелер тізімін алу
- асинх Client.prototype.getFileToBuffer() — файлды буферге түсіріңіз
- асинх Client.prototype.getFileToPath() — файлды файлдық жүйеге алу
- асинх Client.prototype.getFileToBlob() — файлды blob ішінде алыңыз (шолғыш нұсқасы үшін)
- асинх Client.prototype.removeFile() - файлды жою
- Client.prototype.createRequestedFileLink() — кейінге қалдырылған сілтеме жасау
Файлдарды басқа серверге экспорттау
Файлдарды басқа түйінге тасымалдау үшін мына әрекеттерді орындауға болады:
- Барлық сақтау қалтасын параметрлермен бірге көшіріңіз. (бұл болашақта жұмыс істемеуі мүмкін)
- Тек файлдары бар қалтаны көшіріңіз. Бірақ бұл жағдайда функцияны бір рет іске қосу қажет болады node.normalizeFilesInfo()барлық мәліметтерді қайта есептеп, мәліметтер базасына енгізу.
- функциясын пайдалану node.exportFiles()ол файлдарды көшіруді бастайды.
Негізгі түйін параметрлері
Сақтау түйінін іске қосқан кезде барлық қажетті параметрлерді көрсетуге болады.
Мен ең негізгілерін сипаттаймын, қалғанын Github сайтынан табуға болады.
- storage.dataSize — файлдары бар қалта өлшемі
- storage.tempSize — уақытша қалта өлшемі
- storage.autoCleanSize — сақтау керек ең аз сақтау көлемі. Бұл параметрді көрсетсеңіз, бос орын таусыла бастағанда, ең аз пайдаланылған файлдар жойылады.
- file.maxSize — файлдың максималды өлшемі
- file.minSize — ең аз файл өлшемі
- file.preferredDuplicates — желідегі файл көшірмелерінің таңдаулы саны
- file.mimeWhitelist - жарамды файл түрлері
- file.mimeҚара тізім - жарамсыз файл түрлері
- file.extWhitelist - жарамды файл кеңейтімдері
- file.extBlacklist - жарамсыз файл кеңейтімдері
- file.linkCache - әртүрлі сілтемелерді кэштеу параметрлері
Өлшемдерге қатысты барлық дерлік параметрлер абсолютті және салыстырмалы мәндерде енгізілуі мүмкін.
Пәрмен жолы арқылы жұмыс істеу
Кітапхананы пәрмен жолы арқылы пайдалануға болады. Мұны істеу үшін оны ғаламдық деңгейде орнату керек: npm i -g қоймасы. Осыдан кейін түйін орналасқан жоба каталогынан қажетті әрекеттерді бастауға болады. Мысалы, storacle -a storeFile -f ./file.txt -c ./config.jsфайлды қосу үшін. Барлық әрекеттерді мына жерден табуға болады
Бұл сізге не үшін қажет болуы мүмкін?
- Егер сіз ыңғайлы әдістерді пайдаланып файлдарды сақтауды және олармен жұмыс істеуді жоспарлайтын орталықтандырылмаған жобаның қандай да бір түрін жасағыңыз келсе. Мысалы, мақаланың басындағы сілтемеде сипатталған музыкалық жоба пайдаланады қойма.
- Файлдарды үлестірілген түрде сақтау қажет кез келген басқа жобаларда жұмыс істесеңіз. Жабық желіңізді оңай құруға, түйіндерді икемді түрде конфигурациялауға және қажет болғанда жаңаларын қосуға болады.
- Егер сізге веб-сайт файлдарын бір жерде сақтау қажет болса және барлығын өзіңіз жазу сізге тым көп болса. Мүмкін бұл кітапхана сіздің жағдайыңыздағы басқаларға қарағанда жақсырақ.
- Егер сізде файлдармен жұмыс істейтін жоба болса, бірақ браузерден барлық манипуляцияларды орындағыңыз келсе. Сервер кодын жазудан аулақ бола аласыз.
Менің контактілерім:
Ақпарат көзі: www.habr.com
