Storcle - markazlashtirilmagan fayllarni saqlash

Storcle - markazlashtirilmagan fayllarni saqlash

Boshlashdan oldin men ketishim kerak oldingi maqolaga havolashuning uchun biz aniq nima haqida gapirayotganimiz aniq bo'ladi.

Ushbu maqolada men fayllarni saqlash uchun mas'ul bo'lgan qatlamni va undan qanday qilib har kim foydalanishi mumkinligini ko'rib chiqmoqchiman. Storcle - bu mustaqil kutubxona, musiqa bilan bevosita aloqasi yo'q. Siz har qanday fayllarni saqlashni tashkil qilishingiz mumkin.

Avvalgi maqolada men bir oz "barrelni aylantirdim" ipfs, lekin bu men hal qilayotgan muammo kontekstida sodir bo'ldi. Umuman olganda, menimcha, bu loyiha ajoyib. Men faqat turli vazifalar uchun turli tarmoqlarni yaratish qobiliyatini afzal ko'raman. Bu strukturani yaxshiroq tashkil qilish va alohida tugunlarga va umuman tarmoqqa yukni kamaytirish imkonini beradi. Hatto bitta loyiha doirasida ham, agar kerak bo'lsa, siz umumiy yukni kamaytirib, tarmoqni ba'zi mezonlarga ko'ra qismlarga bo'lishingiz mumkin.

Shunday qilib, storacle mexanizmdan foydalanadi tarqaladigan tarmoqni tashkil qilish uchun. Asosiy xususiyatlar:

  • Fayllarni har qanday tugun orqali omborga qo'shish mumkin.
  • Fayllar bloklarda emas, balki butunlay saqlanadi.
  • Har bir fayl u bilan keyingi ishlash uchun o'ziga xos kontent xeshiga ega.
  • Kattaroq ishonchlilik uchun fayllarni ko'paytirish mumkin
  • Bitta tugundagi fayllar soni faqat fayl tizimi tomonidan cheklangan (istisno mavjud, quyida batafsilroq)
  • Tarmoqdagi fayllar soni tarmoqdagi joriy tugunlar soniga ko'ra tarqaladigan imkoniyatlar bilan cheklangan bo'lib, ular ikkinchi versiyada cheksiz sonli tugunlar bilan ishlash imkoniyatiga ega bo'ladi (bu haqda boshqa maqolada).

Bu umuman dasturdan qanday ishlashiga oddiy misol:

Server:

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);
  }
})();

Mijoz:

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);
  }
})();

Ichidan ko'rish

Kaput ostida hech qanday ajoyib narsa yo'q. Fayllar soni, ularning umumiy hajmi va boshqa nuqtalari haqidagi ma'lumotlar xotiradagi ma'lumotlar bazasida saqlanadi va fayllar o'chirilgan va qo'shilganda yangilanadi, shuning uchun fayl tizimiga tez-tez kirishning hojati yo'q. Istisno - ma'lum bir saqlash hajmiga erishilganda fayllarni aylantirish va yangilarini qo'shishni taqiqlamaslik kerak bo'lganda axlat yig'uvchini yoqish. Bunday holda, siz saqlashni chetlab o'tishingiz kerak va ko'p sonli fayllar (> million deylik) bilan ishlash sezilarli yuklarga olib kelishi mumkin. Va kamroq fayllarni saqlash va ko'proq tugunlarni ishga tushirish yaxshiroqdir. Agar "tozalovchi" o'chirilgan bo'lsa, unda bunday muammo yo'q.

Fayl xotirasi 256 papkadan va 2 darajali joylashtirishdan iborat. Fayllar ikkinchi darajali papkalarda saqlanadi. Ya'ni, agar 1 million bo'lsa. Har bir bunday papkada taxminan 62500 1000000 ta fayl bo'ladi (256 XNUMX XNUMX / sqrt (XNUMX)).

Jild nomlari fayl xeshidan tuzilgan, shuning uchun agar siz xeshni bilsangiz, unga tezda kirishingiz mumkin.

Ushbu tuzilma juda ko'p turli xil saqlash talablari asosida tanlangan: zaif fayl tizimlarini qo'llab-quvvatlash, bu erda bir papkada ko'p fayllar bo'lishi istalmagan, agar kerak bo'lsa, barcha papkalarni tezda bosib o'tish va hk. Qandaydir oltin o'rtacha.

keshlash

Fayllarni qo'shishda, shuningdek ularni qabul qilishda fayllarga havolalar keshga yoziladi.
Buning yordamida ko'pincha faylni qidirishda butun tarmoq bo'ylab harakatlanishning hojati yo'q. Bu havolalarni olishni tezlashtiradi va tarmoqdagi yukni kamaytiradi. Keshlash http sarlavhalari orqali ham sodir bo'ladi.

Izomorfiya

Mijoz javascriptda yozilgan va izomorf bo'lib, uni to'g'ridan-to'g'ri brauzerdan foydalanish mumkin. 
Siz faylni yuklashingiz mumkin https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js skript va kirish sifatida window.ClientStoracle yoki qurish tizimi orqali import qilish va hokazo.

Kechiktirilgan havolalar

Qiziqarli xususiyat ham "kechiktirilgan ma'lumotnoma" dir. Bu sinxron tarzda, shu yerda va hozir olinishi mumkin bo'lgan faylga havola bo'lib, fayl xotirada allaqachon topilganida tortib olinadi. Bu, masalan, saytda ba'zi rasmlarni ko'rsatish kerak bo'lganda juda qulay. Biz shunchaki kechiktirilgan havolani src-ga joylashtirdik va hammasi shu. Siz ko'p holatlarga duch kelishingiz mumkin.

Client API

  • asinx Client.prototype.storeFile() - faylni saqlash
  • asinx Client.prototype.getFileLink() — faylga toʻgʻridan-toʻgʻri havola olish
  • asinx Client.prototype.getFileLinks() — fayl mavjud boʻlgan barcha tugunlardan toʻgʻridan-toʻgʻri havolalar roʻyxatini olish
  • asinx Client.prototype.getFileToBuffer() — faylni buferga kiriting
  • asinx Client.prototype.getFileToPath() — faylni fayl tizimiga olish
  • asinx Client.prototype.getFileToBlob() — faylni blobda oling (brauzer versiyasi uchun)
  • asinx Client.prototype.removeFile() - faylni o'chirish
  • Client.prototype.createRequestedFileLink() — kechiktirilgan havola yaratish

Fayllarni boshqa serverga eksport qiling

Fayllarni boshqa tugunga o'tkazish uchun siz:

  • Sozlamalar bilan birga butun saqlash papkasini nusxalash kifoya. (bu kelajakda ishlamasligi mumkin)
  • Faqat fayllar bilan jilddan nusxa oling. Ammo, bu holda, siz funktsiyani bir marta ishga tushirishingiz kerak bo'ladi node.normalizeFilesInfo()barcha ma'lumotlarni qayta hisoblash va ma'lumotlar bazasiga kiritish.
  • funksiyasidan foydalanish node.exportFiles()fayllarni nusxalashni boshlaydi.

Asosiy tugun sozlamalari
Saqlash tugunini ishga tushirishda siz barcha kerakli sozlamalarni belgilashingiz mumkin.
Men eng asosiylarini tasvirlab beraman, qolganlarini Github-da topish mumkin.

  • saqlash.dataSize — fayllar bilan jildning hajmi
  • saqlash.tempSize — vaqtinchalik jild hajmi
  • storage.autoCleanSize - saqlash kerak bo'lgan minimal saqlash hajmi. Agar siz ushbu parametrni belgilasangiz, bo'sh joy tugashi bilanoq, eng kam foydalanilgan fayllar o'chiriladi.
  • file.maxSize - maksimal fayl hajmi
  • file.minSize - minimal fayl hajmi
  • file.preferredDuplicates — tarmoqdagi fayl dublikatlarining afzal soni
  • file.mimeWhitellist - haqiqiy fayl turlari
  • file.mimeQora ro'yxat - noto'g'ri fayl turlari
  • file.extWhitellist - amaldagi fayl kengaytmalari
  • file.extQora roʻyxat - noto'g'ri fayl kengaytmalari
  • file.linkCache - turli xil havolalarni keshlash sozlamalari

O'lchovlar bilan bog'liq deyarli barcha parametrlar ham mutlaq, ham nisbiy qiymatlarda kiritilishi mumkin.

Buyruqlar qatori orqali ishlash
Kutubxonadan buyruq satri orqali foydalanish mumkin. Buning uchun uni global miqyosda o'rnatishingiz kerak: npm i -g ombori. Shundan so'ng, tugun joylashgan loyiha katalogidan kerakli harakatlarni boshlashingiz mumkin. Masalan, storacle -a storeFile -f ./file.txt -c ./config.jsfaylni qo'shish uchun. Barcha amallarni bo'limda topish mumkin https://github.com/ortexx/storacle/blob/master/bin/actions.js

Bu sizga nima uchun kerak bo'lishi mumkin?

  • Agar siz qulay usullardan foydalangan holda fayllarni saqlash va ular bilan ishlashni rejalashtirgan markazlashtirilmagan loyihani yaratmoqchi bo'lsangiz. Misol uchun, maqolaning boshida havolada tasvirlangan musiqa loyihasi foydalanadi omborxona.
  • Agar siz fayllarni taqsimlangan holda saqlashingiz kerak bo'lgan boshqa loyihalarda ishlasangiz. Siz osongina yopiq tarmog'ingizni qurishingiz, tugunlarni moslashuvchan tarzda sozlashingiz va kerak bo'lganda yangilarini qo'shishingiz mumkin.
  • Agar siz veb-saytingiz fayllarini biron bir joyda saqlashingiz kerak bo'lsa va hamma narsani o'zingiz yozishingiz juda ko'p bo'lsa. Ehtimol, bu kutubxona sizning holatlaringizda boshqalarga qaraganda yaxshiroq mos keladi.
  • Agar sizda fayllar bilan ishlaydigan loyihangiz bo'lsa, lekin brauzerdan barcha manipulyatsiyalarni amalga oshirmoqchi bo'lsangiz. Server kodini yozishdan qochishingiz mumkin.

Mening aloqalarim:

Manba: www.habr.com

a Izoh qo'shish