
Баштоодон мурун мен кетишим керек Ошентип, биз так эмне жөнүндө сөз болуп жатканы түшүнүктүү болушу үчүн.
Бул макалада мен файлдарды сактоо үчүн жооптуу болгон катмарды жана аны каалаган адам кантип колдонсо болорун карап көргүм келет. , музыка менен түз байланыш жок. Сиз каалаган файлдарды сактоону уюштура аласыз.
Мурунку макалада мен бир аз "бочканы жылдырдым" 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ге кийинкиге калтырылган шилтемени койдук жана ушуну менен бүттү. Сиз көптөгөн учурларды таба аласыз.
Client 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.mimeBlacklist - жараксыз файл түрлөрү
- file.extWhitelist - жарактуу файл кеңейтүүлөрү
- file.extBlacklist - жараксыз файл кеңейтүүлөрү
- file.linkCache - ар кандай шилтеме кэш орнотуулары
Өлчөмгө байланыштуу дээрлик бардык параметрлер абсолюттук жана салыштырмалуу маанилерде да киргизилиши мүмкүн.
Буйрук сабы аркылуу иштөө
Китепкана буйрук сабы аркылуу колдонулушу мүмкүн. Бул үчүн, сиз аны глобалдуу орнотуу керек: npm i -g сактагыч. Андан кийин, сиз түйүн жайгашкан долбоордун каталогунан керектүү аракеттерди баштасаңыз болот. Мисалы, storacle -a storeFile -f ./file.txt -c ./config.jsфайлды кошуу үчүн. Бардык аракеттерди табууга болот
Бул эмне үчүн сизге керек болушу мүмкүн?
- Эгерде сиз кандайдыр бир борбордон ажыратылган долбоорду түзүүнү кааласаңыз, анда сиз ыңгайлуу ыкмаларды колдонуп файлдарды сактоону жана алар менен иштөөнү пландаштыруудасыз. Мисалы, макаланын башында шилтемеде сүрөттөлгөн музыкалык долбоор колдонот сактагыч.
- Эгерде сиз файлдарды бөлүштүрүлгөн түрдө сактоо керек болгон башка долбоорлордо иштесеңиз. Сиз жабык тармагыңызды оңой куруп, түйүндөрдү ийкемдүү конфигурациялап, керек болгондо жаңыларын кошо аласыз.
- Эгер сиз жөн гана веб-сайтыңыздын файлдарын бир жерде сакташыңыз керек болсо жана бардыгын өзүңүз жазуу өтө эле көп болсо. Балким, бул китепкана сиздин жагдайыңызда башкаларга караганда жакшыраак.
- Эгер сизде файлдар менен иштеген долбоор бар болсо, бирок браузерден бардык манипуляцияларды жасагыңыз келсе. Сиз сервер кодун жазуудан качсаңыз болот.
Менин байланыштарым:
Source: www.habr.com
