Ma mua o koʻu hoʻomaka ʻana, pono wau e haʻalele
Ma kēia ʻatikala makemake wau e nānā i ka papa i kuleana no ka mālama ʻana i nā faila, a pehea e hiki ai ke hoʻohana ʻia e kekahi.
Ma ka ʻatikala ma mua, ua "'ōwili wau i ka pahu" ma kahi liʻiliʻi ipfs, akā ua hana pololei kēia i loko o ka pōʻaiapili o ka pilikia aʻu e hoʻoholo nei. Ma ke ʻano holoʻokoʻa, manaʻo wau he ʻoluʻolu kēia papahana. Makemake wau i ka hiki ke hana i nā ʻupena like ʻole no nā hana like ʻole. ʻAe kēia iā ʻoe e hoʻonohonoho maikaʻi i ka hoʻolālā a hoʻemi i ka ukana ma nā nodes pākahi a me ka pūnaewele holoʻokoʻa. ʻOiai i loko o ka hoʻolālā o hoʻokahi papahana, inā pono, hiki iā ʻoe ke hoʻokaʻawale i ka pūnaewele i mau ʻāpana e like me kekahi mau koi, e hōʻemi ana i ka ukana holoʻokoʻa.
No laila hoʻohana ʻo storacle i ka mīkini
- Hiki ke hoʻohui ʻia nā faila i ka waihona ma o kekahi node.
- Mālama ʻia nā faila, ʻaʻole i loko o nā poloka.
- Loaʻa i kēlā me kēia faila kona hash maʻiʻo ponoʻī no ka hana hou aku me ia.
- Hiki ke kope kope ʻia nā faila no ka hilinaʻi ʻoi aku
- ʻO ka helu o nā faila ma hoʻokahi node e kaupalena wale ʻia e ka ʻōnaehana faila (he ʻokoʻa, ʻoi aku ka nui ma lalo)
- Ua kaupalena ʻia ka helu o nā faila i ka hiki ke hoʻolaha ʻia e like me ka nui o nā nodes kūpono i ka pūnaewele, a ma ka lua o ka mana e ʻae ai e hana me kahi helu pau ʻole o nā nodes (ʻoi aʻe ma kēia ma kekahi ʻatikala)
ʻO kahi hiʻohiʻona maʻalahi o ka hana maʻamau mai ka papahana:
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);
}
})();
Mea kūʻai:
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);
}
})();
I loko o ke nānā ʻana
ʻAʻohe mea nani ma lalo o ka puʻupuʻu. ʻO ka ʻike e pili ana i ka helu o nā faila, ko lākou nui a me nā helu ʻē aʻe e mālama ʻia i loko o kahi waihona hoʻomanaʻo a hōʻano hou ʻia ke holoi ʻia a hoʻohui ʻia nā faila, no laila ʻaʻohe pono e komo pinepine i ka ʻōnaehana faila. ʻO kahi ʻokoʻa ka hiki ʻana i ka ʻohi ʻōpala ke pono ʻoe e hoʻolaha i nā faila ke hiki i kahi nui o ka waiho ʻana, a ʻaʻole e pāpā i ka hoʻohui ʻana i nā mea hou. I kēia hihia, pono ʻoe e kāpae i ka waiho ʻana, a me ka hana ʻana me ka nui o nā faila (> ʻōlelo ʻia he miliona) hiki ke alakaʻi i nā ukana nui. A ʻoi aku ka maikaʻi o ka mālama ʻana i nā faila liʻiliʻi a holo hou i nā node. Inā pio ka "mea hoʻomaʻemaʻe", a laila ʻaʻohe pilikia.
Aia ka waihona waihona he 256 waihona a me 2 pae o ka nesting. Mālama ʻia nā faila ma nā waihona pae ʻelua. ʻO ia, inā he 1 miliona. Aia ma kahi o 62500 faila i kēlā me kēia waihona (1000000 / sqrt(256)).
Hoʻokumu ʻia nā inoa waihona mai ka file hash i hiki iā ʻoe ke komo wikiwiki inā ʻike ʻoe i ka hash.
Ua koho ʻia kēia ʻano ma muli o ka nui o nā koi mālama ʻē aʻe: kākoʻo no nā ʻōnaehana faila nāwaliwali, kahi i makemake ʻole ʻia e loaʻa i nā faila he nui i hoʻokahi waihona, ka hele wikiwiki ʻana i nā faila āpau inā pono, etc. ʻO kekahi ʻano mean gula.
kāʻei kapu
I ka hoʻohui ʻana i nā faila, a me ka wā e loaʻa ai iā lākou, kākau ʻia nā loulou i nā faila i ka cache.
Mahalo i kēia, pinepine ʻaʻole pono e hele i ka pūnaewele holoʻokoʻa e ʻimi i kahi faila. Hoʻonui kēia i ka loaʻa ʻana o nā loulou a hoʻemi i ka ukana ma ka pūnaewele. Hoʻokomo pū ʻia ka cache ma o nā poʻomanaʻo http.
Isomorphy
Ua kākau ʻia ka mea kūʻai ma ka javascript a he isomorphic, hiki ke hoʻohana pololei ʻia mai ka polokalamu kele pūnaewele.
Hiki iā ʻoe ke hoʻouka i ka faila
Nā loulou hoʻopaneʻe
ʻO kahi hiʻohiʻona hoihoi ʻia ʻo ia hoʻi ka "deferred reference". He loulou kēia i kahi faila hiki ke loaʻa i ka synchronously, ma ʻaneʻi a i kēia manawa, a e huki ʻia ka faila i ka wā e loaʻa ai i ka waihona. He mea maʻalahi kēia inā, no ka laʻana, pono ʻoe e hōʻike i kekahi mau kiʻi ma ka pūnaewele. Hoʻokomo wale mākou i kahi loulou i hoʻopanee ʻia ma src a ʻo ia nō. Hiki iā ʻoe ke hana i nā hihia he nui.
API mea kūʻai aku
- async Client.prototype.storeFile() - mālama i ka faila
- async Client.prototype.getFileLink() - loaʻa kahi loulou pololei i ka faila
- async Client.prototype.getFileLinks() - ke kiʻi ʻana i kahi papa inoa o nā loulou pololei i kahi faila mai nā node a pau e noho ai
- async Client.prototype.getFileToBuffer() - e hoʻokomo i ka faila i loko o ka buffer
- async Client.prototype.getFileToPath() - e kiʻi i kahi faila i ka ʻōnaehana faila
- async Client.prototype.getFileToBlob() - e kiʻi i ka faila ma ka blob (no ka polokalamu kele pūnaewele)
- async Client.prototype.removeFile() - holoi i kahi faila
- Client.prototype.createRequestedFileLink() - hana i kahi loulou hoʻopanee
Hoʻokuʻu aku i nā faila i kahi kikowaena ʻē aʻe
No ka hoʻoili ʻana i nā faila i kekahi node, hiki iā ʻoe ke:
- E kope wale i ka waihona waihona a pau me nā hoʻonohonoho. (ʻaʻole paha e hana kēia i ka wā e hiki mai ana)
- E kope wale i ka waihona me nā faila. Akā, i kēia hihia, pono ʻoe e holo i ka hana i hoʻokahi manawa node.normalizeFilesInfo()e helu hou i nā ʻikepili a pau a hoʻokomo i loko o ka waihona.
- E hoʻohana i ka hana node.exportFiles()e hoʻomaka e kope i nā faila.
Nā hoʻonohonoho node kumu
I ka hoʻomaka ʻana i ka node mālama, hiki iā ʻoe ke kuhikuhi i nā hoʻonohonoho pono āpau.
E wehewehe wau i nā mea maʻamau, hiki ke loaʻa ke koena ma Github.
- waihona.dataSize - ka nui o ka waihona me nā faila
- waihona.tempSize — ka nui o ka waihona no ka manawa
- storage.autoCleanSize - ka liʻiliʻi liʻiliʻi o ka waiho ʻana e pono e paʻa. Inā ʻoe e kuhikuhi i kēia ʻāpana, a laila i ka wā e hoʻomaka ai ka pau ʻana o ka hakahaka, e holoi ʻia nā faila liʻiliʻi loa.
- waihona.maxSize — ka nui o ka waihona
- waihona.minSize — ka nui o ka waihona
- file.preferredDuplicates - ka helu makemake o nā faila ma ka pūnaewele
- file.mimeWhitelist - nā ʻano faila kūpono
- file.mimeBlacklist - nā ʻano faila hewa ʻole
- file.extWhitelist - nā hoʻonui waihona kūpono
- file.extBlacklist - kūpono ʻole nā hoʻonui faila
- file.linkCache - nā hoʻonohonoho hoʻonohonoho hoʻopaʻa inoa loulou
Aneane hiki ke hoʻokomo ʻia nā ʻāpana āpau e pili ana i nā ana i nā waiwai kūʻokoʻa a pili.
Ke hana nei ma ka laina kauoha
Hiki ke hoʻohana ʻia ka waihona ma o ka laina kauoha. No ka hana ʻana i kēia, pono ʻoe e hoʻokomo iā ia ma ka honua: npm i -g storacle. Ma hope o kēia, hiki iā ʻoe ke hoʻomaka i nā hana e pono ai mai ka papa kuhikuhi papahana kahi o ka node. ʻo kahi laʻana, storacle -a hale kūʻaiFile -f ./file.txt -c ./config.jse hoʻohui i ka faila. Hiki ke loaʻa nā hana a pau ma
No ke aha paha ʻoe e pono ai i kēia?
- Inā makemake ʻoe e hana i kekahi ʻano papahana decentralized kahi āu e hoʻolālā ai e mālama a hana pū me nā faila me ka hoʻohana ʻana i nā ala kūpono. No ka laʻana, hoʻohana ka papahana mele i wehewehe ʻia ma ka loulou ma ka hoʻomaka o ka ʻatikala hale waihona kālā.
- Inā ʻoe e hana ma nā papahana ʻē aʻe kahi āu e pono ai e mālama i nā faila ma ke ʻano puʻupuʻu. Hiki iā ʻoe ke kūkulu maʻalahi i kāu pūnaewele paʻa, hoʻonohonoho maʻalahi i nā nodes a hoʻohui i nā mea hou inā pono.
- Inā pono ʻoe e hoʻopaʻa i kāu mau faila pūnaewele ma kahi a he mea nui loa iā ʻoe ke kākau i nā mea āpau iā ʻoe iho. Ua kūpono paha kēia waihona ma mua o nā mea ʻē aʻe i kāu hihia.
- Inā he papahana kāu e hana ai me nā faila, akā makemake ʻoe e hana i nā manipulations āpau mai ka polokalamu kele pūnaewele. Hiki iā ʻoe ke pale i ke kākau ʻana i ke code server.
ʻO kaʻu mau leka:
Source: www.habr.com