A Bloom-szűrő hatékony valószínűségi alapú adatszerkezet, melyet Burton Howard Bloom írt le 1970-ben, annak ellenőrzésére használják, hogy egy elem egy halmaz eleme-e. Hamis pozitívok előfordulhatnak, de hamis negatívok nem – tehát egy kérés vagy „a halmazban lehet”, vagy „egyértelműen nincs a halmazban” eredményt ad. Hozzáadhatók elemek a halmazhoz, de el nem vehetők (de ez számláló Bloom-szűrővel megoldható). Az elemszámmal nő a hamis pozitív eredmény valószínűsége.
Ez az elemek leképezését jelenti -ra, majd vizsgálatát annak vizsgálatával, hogy , mindezt több hhasítófüggvénnyel vizsgálva.
Bloom a technikát olyan esetekre javasolta, ha a forrásadat nagy memóriát igényelne „hagyományos” hibamentes hasítási technikákkal. Példaként írt egy 500 000 szavas szótár szótagolási algoritmusáról, ahol a szavak 90%-a egyszerű szabályt követ, de a maradék 10% költséges tárhelyhozzáférést igényel bizonyos szótagolási minták megszerzéséhez. Elegendő magmemóriával egy hibátlan hasítófüggvény használható minden felesleges hozzáférés megszüntetéséhez, de korlátozott memória esetén Bloom technikája kisebb területet igényel, de a legtöbb felesleges hozzáférést megszünteti. Például egy ideális hasításhoz szükséges terület 15%-ával megegyező hasítási terület a hozzáférések 85%-át megszünteti.[1]
Általánosabban: kevesebb mint 10 bit szükséges 1%-os hamispozitív-valószínűséghez elemszámtól és mérettől függetlenül.[2]
Az algoritmus leírása
Az üres Bloom-szűrő 0 bitből álló sor. Ezenkívül szükséges különböző hasítófüggvény, melyek egyes elemeket a tömbbeli helyek valamelyikéhez rendelnek egy elemet, uniform véletlenszerű eloszlást létrehozva. Általában k kis, az hibaaránytól függő konstans, míg m k-val és a hozzáadandó elemek számával arányos.
Egy elem hozzáadásához a k hasítófüggvény argumentumaként adandó meg, így k helyet kapva. E helyek bitjei 1-re állítandók.
Egy elem lekérdezéséhez (vagyis annak ellenőrzéséhez, hogy a halmaz eleme-e) megadandó a k hasítófüggvény argumentumaként, így k helyet kapva. Ha bármely helyen a bit 0, az elem nem eleme a halmaznak, ha az volna, beillesztésekor minden bit 1 lenne. Ha mindegyik 1, vagy a halmaz eleme az elem, vagy más elemek hozzáadásakor változtak 1-re a bitek, hamis pozitívot adva. Egyszerű Bloom-szűrőben nincs különbség a két eset közt, de összetettebb módszerek megoldják ezt.
A k eltérő függvény tervezése nehézkes lehet nagy k-ra. Egy jó, széles kimenetű hasítófüggvényhez gyenge korrelációnak kell lennie (ha egyáltalán van) a különböző bitmezők közt, így több „különböző” hasítófüggvény hozható létre a kimenet több bitmezőre való szeletelésével. Egy másik mód k eltérő bemeneti érték (például ) bevitele egy bemenetű hasítófüggvényhez, vagy ezen értékek kulcshoz adása. Nagy m vagy k esetén a függvények függetlensége a hamispozitív-arány csekély növekedésével enyhíthető.[3] (Különösen (Dillinger & Manolios 2004b) mutatja meg a k index levezetését javított dupla, illetve tripla hasítással, melyek a dupla hasítás egyszerű véletlenszám-generáló változatai, melyek bemenete a két vagy három hasítási érték.)
Egy elem eltávolítása egyszerű Bloom-szűrőből lehetetlen, mivel nem deríthető ki, hogy a k hozzárendelt bit melyike állítandó 0-ra. Bár a k bit bármelyikének 0-ra állítása elég az elem eltávolításához, ez más elemeket is eltávolít, melyeknek e bitre van leképezésük. Mivel az egyszerű algoritmus nem ad lehetőséget annak meghatározására, hogy más elemek is vannak-e, melyek megváltoztatják az elemhez eltávolítható biteket, bármely bit eltávolítása hamis negatívot okozhat.
Egy elem egyszeri eltávolítása egy Bloom-szűrőből szimulálható másik Bloom-szűrővel, mely az eltávolított elemeket tartalmazza. Azonban a második szűrő hamis pozitívjai az összetett szűrőben nem kívánt hamis negatívok lesznek. Ekkor egy korábban törölt elem visszaadása nem lehetséges, mivel a „törölt” szűrőből kellene törölni.
Gyakran bár minden kulcs elérhető, de felsorolásuk költséges (például sok olvasási műveletet igényel). Ha a hamispozitív-arány túl magas, a szűrő újból létrehozható, de ez általában ritka.
Hely- és időelőnyök
A hamis pozitívok kockázata ellenére a Bloom-szűrők jelentős helyelőnnyel rendelkezik más halmazjelölő adatszerkezetekhez képest, amilyenek az önkiegyensúlyozó bináris keresőfák, a trie-k, a hasítótáblák, a tömbök és a bejegyzések kapcsolt listái. Ezek legtöbbjéhez szükséges maguknak az elemeknek a tárolása, mely kevés bittől (kis egészek) tetszőleges számú bitet igénybevehetnek, például sztringek esetén (a trie-k kivételek, mivel azonos prefixumú elemek közt megoszthatnak tárhelyet). Azonban a Bloom-szűrők nem tárolják magukat az adatokat, és önálló megoldás kell a tényleges tárhelyhez. A kapcsolt szerkezeteknek a mutatókhoz lineáris helytöbblet kell. Egy 1%-os hibaarányú, k optimális értékű Bloom-szűrőhöz ezzel szemben elemenként mintegy 9,6 bit kell elemmérettől függetlenül. Ennek oka részben a tömbökhöz hasonló tömörség, részben a valószínűség-alapú természete. Az 1%-os hamispozitív-arány elemenként mintegy 4,8 bittel tizedére csökkenthető.
Azonban ha a lehetséges értékek száma kicsi, és nagy részük a halmaz eleme lehet, a Bloom-szűrőnél a determinisztikus bittömb jobb lehet, mely csak 1 bitet igényel lehetséges elemenként. A hasítótáblák hely- és időelőnnyel is rendelkeznek, ha az ütközéseket figyelmen kívül hagyják, és csak azt tárolják, hogy az egyes helyek tartalmaznak-e elemet, ez esetben gyakorlatilag Bloom-szűrők lettek, ahol .[4]
A Bloom-szűrők érdekessége, hogy egy elem hozzáadásához vagy egy elem halmazba tartozásának ellenőrzéséhez szükséges idő konstans (), az elemszámtól független. Nincs más ilyen konstans adatszerkezet, de a ritka hasítótáblák átlagos elérési ideje kisebb lehet egyes Bloom-szűrőkénél. Hardverben azonban a Bloom-szűrő jobb, mivel a k keresés egymástól független és párhuzamossá tehető.
Helyhatékonysága megértéséhez fontos az általános Bloom-szűrő összehasonlítása a speciális esettel. Ha , a hamis pozitívok arányának alacsonyan tartásához kevés bitnek kell 1-nek lennie, így a tömbnek nagynak kell lennie, hosszú 0-sorokkal. A tömb méretéhez viszonyított információtartalma alacsony. Az általános Bloom-szűrő ( sokkal több 1 bitet enged alacsony hamispozitív-arány mellett. Megfelelő k és m esetén a bitek körülbelül fele 1 lesz,[5] melyek nagyjából véletlenszerűek lesznek, minimalizálva a redundanciát és maximalizálva az információtartalmat.
Hamispozitív-arány
Ha egy hasítófüggvény minden tömbbeli helyet azonos valószínűséggel választ ki, és m bites a tömb, annak valószínűsége, hogy egy bitet elem beillesztésekor nem változtat 1-re egy hasítófüggvény, .
Ha k a hasítófüggvények száma, és egyikük közt sincs korreláció, annak valószínűsége, hogy egy bitet egy hasítófüggvény se állít 1-re:
Felhasználva az -gyel kapcsolatos azonosságot: , így nagy m esetén
n elem esetén a 0 bit valószínűsége:
tehát az 1 bité:
Egy, a halmazban nem lévő elem ellenőrzésekor a hasítófüggvénnyel számítótt k pozíció a fenti valószínűséggel 1. Annak valószínűsége hogy mindegyik 1, így az algoritmus hibásan állítja, hogy az elem a halmazban van, gyakran szerepel így:
Ez nem feltétlenül igaz, mert feltételezi az egyes bitek állapotának valószínűségének függetlenségét. Azonban feltéve, hogy ez közelítőleg igaz, a hamis pozitívok valószínűsége csökken m növekedésével, és nő n-ével (az elemszáméval).
A hamis pozitív tényleges valószínűsége függetlenség feltételezése nélkül:
Egy ugyane közelítést adó elemzést adott meg Mitzenmacher és Upfal.[7] Miután mind az n elem bekerült a szűrőbe, legyen q az m bitből a 0-k aránya (tehát a 0 bitek száma qm). Ekkor egy halmazon kívüli elem ellenőrzésekor a k hasítófüggvény bármelyike által adott pozíció esetén annak valószínűsége, hogy a talált bit 1, . Így annak valószínűsége, hogy mind a k hasítófüggvény által talált bit 1, . Továbbá q várt értéke annak valószínűsége, hogy egy adott helyt érintetlenül hagyott mind a k hasítófüggvény mind az n elemre, mely:
.
Bebizonyítható a függetlenség feltételezése nélkül, hogy a q a várt értékhez nagy valószínűséggel nagyon közel van. Az Azuma–Hoeffding-egyenlőtlenségből bebizonyították, hogy:[8]
Innen kijelenthető, hogy a pontos hamispozitív-valószínűség:
Optimális hasítófüggvényszám
A hasítófüggvények száma, k, pozitív egész kell, hogy legyen. Ettől eltekintve adott m és n esetén a legkevesebb hamis pozitívot adó k
A szükséges bitszám, m adott n (elemszám), a kívánt hamispozitív-valószínűség, ε és optimális k esetén k fenti valószínűségbe helyettesítésével adható meg:
vagyis:
Innen:
Tehát az optimális bitszám:
ahol a megfelelő k hasítófüggvényszám eltekintve attól, hogy egésznek kell lennie:
Tehát adott ε hamispozitív-valószínűség esetén a Bloom-szűrő hossza, m arányos a szűrt elemek számával, n-nel, a szükséges hasítófüggvények száma csak ε-tól függ.[9]
Az képlet 3 okból közelít. Először: az -et -ként közelíti, mely jó aszimptotikus közelítés (egyre jobban közeledik, ahogy m →∞). Másodszor, feltételezi, hogy az, hogy a tesztelt bit 1, független attól, hogy bármely más bit 1. Végül feltételezi, hogy egész.
Goel és Gupta[10] azonban közelítések és feltételezések nélküli felső határt adtak, és bemutatták, hogy egy véges, m bites, n elemes és k hasítófüggvényes Bloom-szűrő hamispozitív-valószínűsége () legfeljebb
Ez azt jelenti, hogy a közelítő képlet legfeljebb fél elemmel többet és legfeljebb 1-gyel kevesebb bitet jelent.
Egy Bloom-szűrő elemszámának közelítése
(Swamidass & Baldi 2007) szerint egy Bloom-szűrő elemszáma az alábbi képlettel közelíthető:
ahol a szűrő elemszámának becslése, m a szűrő hossza, k a hasítófüggvények száma, X az 1 bitek száma.
Halmazok uniója és metszete
A Bloom-szűrők halmazok kompakt megadására alkalmas. Gyakran használják két halmaz uniójának vagy metszetének elemszámának becslésére. (Swamidass & Baldi 2007) kimutatta, hogy két m hosszú Bloom-szűrő esetén elemszámuk közelítőleg és
Uniójuk mérete közelítőleg ahol azon bitek száma, mely legalább az egyik szűrőben 1. Metszetük mérete közelítőleg a három képletet együtt használva.
Jellemzők
Szemben egy hagyományos hasítótáblával, mely nyílt címzést használ ütközésfeloldáshoz, egy fix méretű Bloom-szűrő tetszőleges mennyiségű elemű halmazt jelölhet, azonban a hamispozitív-arány addig növekszik, míg a szűrőben minden bit 1 nem lesz, ahol már minden lekérdezés pozitív eredményt ad. Nyílt címzésű hasítással sosincs hamis pozitív, de a teljesítmény csökken, míg el nem éri a lineáris keresését.
Azonos méretű és hasítófüggvény-halmazú Bloom-szűrők uniója és metszetebitenkénti „vagy” és „és” műveletekkel kapható meg. Az unióművelet veszteségmentes abban az értelemben, hogy az eredmény ugyanaz, mint a két halmaz uniójából képzett Bloom-szűrő. A metszetművelet eredményének hamispozitív-aránya nem nagyobb egyik kiinduló szűrőénél sem, de a két halmaz metszetéből készített szűrőénél nagyobb lehet.
Bizonyos hasítókódok tekinthetők bevágott kártyák Bloom-szűrőiként. Ilyen például a Zatocoding, melyet Calvin Mooers hozott létre 1947-ben, ahol a kategóriahalmazt bevágások jelölik a kártyán, minden kategóriának véletlenszerű 4 bevágásos mintával.
Példák
Az ecetmuslicák módosított Bloom-szűrőket használnak új szagok érzékelésére, további funkciókkal, melyek képesek a korábbiakhoz való hasonlóságát és az azonos szag korábbi érzete óta eltelt időt érzékelni.[11]
Egy tartalomszolgáltató, az Akamai Technologies szerverei Bloom-szűrőket használnak az egyszer keresett objektumok gyorsítótárban való tárolása ellen. Ezekről az Akamai kiderítette, hogy gyorsítótárának mintegy háromnegyedét adták. Egy Bloom-szűrő használata egy objektum második kérésének észlelésére, és csupán ekkori gyorsítótárazására megakadályozza az egyszer keresett objektumok gyorsítótárazását, csökkentve a tárhely terhelését.[12]
A Google Chrome korábban Bloom-szűrőket használt káros URL-ek azonosítására. Ezeket eleinte egy helyi szűrőn ellenőrizték, és ennek pozitív eredménye esetén történt meg a teljes ellenőrzés (és a felhasználót ennek pozitív eredménye esetén figyelmeztette).[15][16]
A Microsoft Bing többszintű hierarchikus Bloom-szűrőket használ indexelőjéhez, a BitFunnelhez. A Bloom-szűrők alacsonyabb költséget jelentettek a korábbi, inverz fájlokon alapuló indexelésnél.[17]
A Cascading analitikai keretrendszer Bloom-szűrőket használ aszimmetrikus összevonásokhoz, ahol az egyik adathalmaz sokkal nagyobb a másiknál.[23]
Az Exim levelezőprogram Bloom-szűrőket használ sűrűségkorlátozáshoz.[24]
A Medium Bloom-szűrőket használ korábban olvasott cikkek ajánlásának elkerülésére.[25]
Az Ethereum Bloom-szűrőket használ az Ethereum-blokklánc naplóihoz.
A Grafana Tempo Bloom-szűrőket használ a lekérdezésteljesítmény javításához minden cellában való tárolásukkal. Ezekhez minden lekérdezéskor hozzáfér, hogy meghatározza a megadott kritériumoknak megfelelő adatokat.[26]
Alternatívák
A Bloom-szűrőknek kulcsonként bit kell, ahol a hamispozitív-arány. A feltétlenül szükséges hely bit,[27] így a Bloom-szűrők helyigénye 44%-kal több egy megfelelő optimális adatszerkezetnél. Pagh és társai optimális helyigényű adatszerkezetet mutattak be, állandó, hamispozitív-aránytól független referenciahellyel, szemben a Bloom-szűrőkkel, ahol az alacsonyabb hamispozitív-arány több memória-hozzáférést jelent. Továbbá lehetséges benne a helyveszteség nélküli elemtörlés. Ugyanezek jellemzők a kakukkszűrőre (Fan et al. 2014), melynek nyílt forrású változata elérhető.
(Stern & Dill 1996) valószínűségi alapú szerkezetet ír le hasítótáblákon, hasítástömörítésen alapulva, melyet (Dillinger & Manolios 2004b) sokkal pontosabbnak ír le egy Bloom-szűrőnél, ha minden optimálisan van beállítva. Dillinger és Manolios azonban rámutatnak, hogy adott Bloom-szűrő megfelelő pontossága széles körben vonzóvá teszi ismeretlen állapotterek valószínűségi elemzésekor. A hasítástömörítés így pontosan becsülhető összeadáskor használatos, azonban bár gyors a szoftver, de nem optimális a hardvernek a legrosszabb esetben lineáris hozzáférési idő miatt.
(Putze, Sanders & Singler 2007) bizonyos Bloom-szűrő-változatokat tanulmányoztak, melyek gyorsabbak vagy helyhatékonyabbak a hagyományos Bloom-szűrőknél. A gyors változat alapötlete, hogy a kulcsokhoz rendelt k értéket egy vagy két gyorsítótárblokknyi (általában 64 bájt) egységbe helyezi, feltehetően annak elkerülésével, hogy ne találjon meg a rendszer valamit a gyorsítótárban, javítja a teljesítményt. Ezek azonban a Bloom-szűrőnél 32%-kal több helyet használnak.
A helyhatékony változat egy minden kulcshoz a tartományban lévő értéket rendelő hasítófüggvényen alapul, ahol a kívánt hamispozitív-arány. A sorozatot ezután rendezi, majd Golomb-kódolással (vagy más tömörítési módszerrel) tömöríti, hogy nagyjából bitet foglaljon. Egy kulcshoz való lekérdezéshez elég ellenőrizni, hogy a megfelelő érték benne van-e a szűrőben. Az egész szűrő kicsomagolása minden lekérdezéshez e változatot fölössé tenné, így az értéksort azonos méretű kis részekre bontja, melyek tömörítése külön történik. Lekérdezéskor átlagosan fél blokk csomagolandó ki. A kicsomagolási idő miatt e változat lassabb lehet a hagyományos Bloom-szűrőnél, azonban csak egy hasítófüggvény számítandó ki.
Egy újabb alternatíva a kakukkszűrő, mely a kakukkhasítás helyhatékony változatait használja. Ekkor hasítótábla jön létre, melyben nem maguk a kulcsok vagy az értékek vannak, hanem a kulcsok kis ujjlenyomatai (a hasítófüggvény értékei). Ha a kulcs keresésekor megvan a megfelelő ujjlenyomat, a kulcs valószínűleg a halmaz eleme. A kakukkszűrők frissíthetők – dinamikusan hozzáadhatók (kivéve, ha a tábla teli) és eltávolíthatók kulcsok.
(Graf & Lemire 2020) egy xor szűrőt mutat be, ahol az ujjlenyomatok egy tökéletes hasításhoz hasonló táblában vannak, memóriahatékonyabb ( bit kulcsonként) és gyorsabb szűrőt adva a Bloom- és a kakukkszűrőknél. A gyorsulás oka, hogy egy kereséshez 3-szor kell hozzáférni a memóriához, melyek párhuzamosan haladhatnak. Azonban a szűrőkészítés összetettebb, és a halmaz létrejötte után nem módosítható.
Kiterjesztések és alkalmazások
Több mint 60 Bloom-filter-változat van, továbbá sok tanulmány a területről, és sok alkalmazási mód (például Luo et al.).[28] E változatok némelyike eléggé eltér az eredetitől, hogy az eredeti szerkezet és filozófia módosulatainak vagy sértéseinek tekintsék.[28] A Bloom-szűrőket egyesítő kezelés, valamint a véletlen projekciók, tömörítő érzékelés és a helyszenzitív hasítás sincs befejezve (egy idegtudományi kísérlethez vö. Dasgupta, et al.).[29]
Gyorsítótárszűrés
A tartalomszolgáltatók gyorsítótárakat használnak a tartalmak hatékonyabb, gyorsabb szolgáltatására. A Bloom-szűrők fontos alkalmazása annak hatékony meghatározása, mely webobjektumok tárolandók el a gyorsítótárakban. Egy gyorsítótárban szereplő URL-ek mintegy háromnegyedét a felhasználók csak egyszer érik el, így tárolásuk felesleges, mivel nem történik újabb hozzáférés. Ezek gyorsítótárazásának elkerülésére Bloom-szűrőt használnak. Egy webobjektumot gyorsítótárazása így akkor történik meg, ha már legalább egyszer hozzáfértek, vagyis az objektum a második kéréskor kerül a gyorsítótárba. A Bloom-szűrők használata így jelentősen csökkenti az írási műveletek számát, mivel a legtöbb egyszer felkeresett hely nem kerül be a gyorsítótárba. Továbbá a csak egyszer felkeresett lapok szűrése helyet szabadít fel a gyorsítótárban, növelve annak teljesítményét.[12]
Hamis pozitívok elkerülése véges univerzumban
Kiss et al.[30] olyan Bloom-szűrőt írtak le, melyek elkerülik a hamis pozitívokat a hamis negatívok nemléte mellett. Ez véges univerzumra használható, melyből a halmaz elemeit választjuk. Eppstein, Goodrich és Hirschberg nem adaptív kombinatorikai csoporttesztelési sémáján alapul. Szemben a Bloom-szűrővel, az elemeket determinisztikus, gyors és könnyen számítható függvények hasítják. A maximális hamispozitív-mentes halmazméret függ az univerzummérettől és a felhasznált memóriától.
Egy másik lehetőség egy kezdeti Bloom-szűrő hagyományos módú felépítése véges és felsorolható doménen, ahol minden hamis pozitív megtalálható, majd e listából egy második Bloom-szűrő felépíthető; a második szűrő hamis pozitívjai egy harmadik szűrővel találhatók meg így, stb. Mivel az univerzum véges, és a hamis pozitívok halmaza csökken minden lépésben, ez véges Bloom-szűrő-láncot eredményez, mely a véges doménen csak valós pozitívokat és valós negatívokat ad. A szűrőláncban annak ellenőrzése, hogy valami egy halmaz eleme-e, az első szűrő lekérdezése után pozitív eredmény esetén a második szűrő lekérdezése történik, stb. Ezt használja a CRLite, mely a Web PKItanúsítvány-visszavonásokat elosztó módszere, és a tanúsítványátláthatóságot használja fel az érvényes tanúsítványok halmazának lezárására.[31]
Számláló Bloom-szűrők
A számláló szűrők egy törlést Bloom-szűrőn lehetővé tevő mód a szűrő létrehozása nélkül. Benne a tömbbeli helyek több bites számlálóként működnek. A hagyományos Bloom-szűrők tekinthetők 1 bites számlálójú számláló szűrőkként. A (Fan et al. 2000) tanulmány vezette be őket.
Az elemhozzáadás 1-gyel növeli a számlálók értékeit, a keresés megtekinti, hogy a kívánt számlálók egyike se 0, a törlés csökkenti a megfelelő számlálók értékét 1-gyel.
A számlálók túlcsordulása lehet itt probléma, így azoknak elég nagynak kell lenniük, hogy ritka legyen az eset. Ekkor azonban az 1 hozzáadásának és elvételének a számlálót a legnagyobb értéken kell hagyniuk a Bloom-szűrő tulajdonságainak megmaradásához.
A számlálók mérete általában 3 vagy 4 bit, így a számláló Bloom-szűrők 3–4-szer annyi helyet használnak a statikusaknál. Ezzel szemben a (Pagh, Pagh & Rao 2005) és (Fan et al. 2014) adatszerkezeteiben lehetséges törlés, de kevesebb helyet használnak a Bloom-szűrőnél.
További gond a korlátozott méretezhetőség. Mivel a tábla nem bővíthető, az egyidejűleg tárolt kulcsok maximális száma előre ismerendő. A megadott kapacitás túllépésekor a hamis pozitívok aránya a kulcsok hozzáadásával gyorsan nő.
(Bonomi et al. 2006) d-balra hasításon alapuló adatszerkezetet vezetett be, mely hasonlóan működik a számláló Bloom-szűrőkhöz, de csak mintegy feleannyi helyet használ, és jobban méretezhető. A megadott méret túllépésekor a kulcsok kétszer akkora hasítótáblába helyezhetők át.
(Putze, Sanders & Singler 2007) helyhatékony változata is használható számláló szűrők támogatására hozzáadással és törléssel.
(Rottenstreich, Kanizo & Keslassy 2012) általános módszert vezetett be változó növekedésekkel, mely jelentősen javítja a hamispozitív-arányt a számláló Bloom-szűrők és változataik esetén, a törlés támogatásával. Szemben a számláló Bloom-szűrőkkel, minden számláló hasított változóval nő az 1 helyett. Egy elem lekérdezésekor a pontos számlálóértékek vannak figyelembe véve. Ha a számláló értéke nem éri el az elemhez tartozó értéket, az elem nincs a halmazban.
Kim et al. (2019) kimutatta, hogy a számláló Bloom-szűrők hamispozitív-aránya 1-től hasítófüggvényig csökken, ettől kezdve végtelenig nő, és a számlálási határtól függ.[32]
Elosztott összegzés
A Bloom-szűrők elosztott adatszerkezetekben is elrendezhetők teljesen elosztott összegzőfüggvényekhez. Ez az összesített méréseket helyileg elérhetővé teszi a hálózat minden pontján központi egység igénye nélkül.[33]
Elosztott Bloom-szűrők
A párhuzamos Bloom-szűrők a több feldolgozóelem előnyeit tudják kihasználni a párhuzamos „semmi nincs megosztva” eszközökön. Fő akadály a rendezetlen adat szervezése és közlése, mely általában egyenlően oszlik el a PE-k közt kezdetben vagy behelyezésekkor. Az adat rendezéséhez két megközelítés használható, vagy minden adathoz tartozó (replikáló) Bloom-szűrőt, vagy minden adatról szóló Bloom-szűrőt, melyeknek egy-egy egyenlő részét tartalmazza egy PE.[34] Mindkét esetben „egypróbás” szűrőt használnak, mely 1 hasítófüggvényt számít, elemenként egy 1 bittel, csökkentve a közölt adat terjedelmét.
Az elosztott szűrők létrehozásakor először a helyi PE-n történik minden elem hasítása, majd helyben történik a hasítási értékek szerinti rendezés. Ez például vödörrendezéssel megoldható lineáris időben, és lehetővé teszi a lokális duplikátumészlelést. A rendezés az értékeket a megfelelő PE-vel való csoportosításhoz való, így csoportonként létrejön egy szűrő. A szűrők kódolása után történik minden szűrő elküldése a hasítási értékekért felelő PE-hez. A p. PE felel a és a közti értékekért, ahol s a szűrő teljes mérete. Mivel minden elem hasítása egyszer történik meg, így 1 bit értéke lesz 1, az elem szűrőbe kerülésének ellenőrzéséhez csak az elem hasítási értékéért felelő PE-t kell vizsgálni. Az egyszeri beillesztések azért is végezhetők hatékonyan, mert csak egy PE szűrőjén kell változtatni, szemben a replikáló Bloom-szűrőkhöz, ahol minden PE szűrője frissül. A teljes szűrő PE-k közti elosztása nagyobb szűrőméretet tesz lehetővé, így nagyobb kapacitást és kevesebb hamis pozitívot is lehetővé téve. Az elosztott szűrők felhasználhatók duplikátumészlelő algoritmusok javítására[35] a „legegyedibb” elemek kiszűrésével. Ezek kiszámíthatók csak a hasítási értékek közlésével, szemben az elemekével, melyek sokkal nagyobbak, és eltávolításuk csökkenti a duplikátumészlelés terhelését.
A hasítási értékek közlésekor a PE-k egynél több csomagban azonos biteket keresnek, ami azt jelenti, hogy két elem hasítási értéke azonos, így duplikátumok lehetnek. Ekkor a bit helyét tartalmazó üzenetet, mely a lehetséges duplikátum hasítási értéke, küldi el a PE-knek, melyek e bitet tartalmazó csomagot küldték. Ha több helyet küld egy küldő egy PE-nek, előnyös lehet a helyek kódoolása is. Azon elemek, melyek hasítási értéke nem érkezett meg, nem duplikátumok, így nem történik további kiértékelésük, a többi elemeknél újraosztó algoritmus használható.[36] Először azon elemek, melyek hasítási értéke visszaérkezett, visszakerülnek a PE-hez, mely a hasítási értékét adta. Minden elem és duplikátuma így egy PE-re kerül. Ezután minden PE szakaszos duplikátumészlelést végez a visszakapott elemeken, melyek a kezdetieknek csak egy része. Egy adott hamispozitív-arány megengedésével a közölt információ tovább csökkenhet, mivel a PE-knek nem kell két hasítási értékkel rendelkező elemeket küldeni, helyette az ismétlődő hasítási értékek egyszerűen ismétlésnek jelölhetők, így a hamispozitív-arány az ismétlésészlelésnél a használt szűrőével egyezik meg.
A „legegyedibb” elemek szűrése többször is megismételhető a hasítófüggvény változtatásával minden lépésben. Egy lépés esetén kis hamispozitív-arányt kell elérni, azonban ha a lépések ismétlődnek, az első lépés hamispozitív-aránya nagyobb lehet, míg a későbbieknek is lehet nagyobb, de ezek kevesebb elemen működnek, mivel sokat a korábbiak eltávolítottak. Bár 2-nél több ismétlés tovább csökkentheti a közölt információkat kevés ismétlődés esetén, a haszon általában csekély.
A replikáló Bloom-szűrők adataikat hiperkocka-algoritmussal rendezik.[37] Először minden PE kiszámítja és eltárolja a hozzá tartozó elemek szűrőjét. Egy ciklus ismétlésével, ahol az i. lépésben elküldik a PE-k a saját i dimenziós szűrőjüket, és egyesítik a megkapott szűrőt a saját szűrővel, megkétszerezhető a szűrők elemszáma minden ismétlésben. Miután elküldték és megkapták a PE-k mind a dimenzióban, minden PE a globális Bloom-szűrőt tartalmazza.
A replikáló Bloom-szűrők hatékonyak, ha a lekérdezésszám sokkal nagyobb az elemszámnál, nagyjából elérésnél azonos a hatékonyságuk az elosztott szűrőkkel, ahol a hamispozitív-arány.
Adatszinkronizáció
A Bloom-szűrők használhatók közeli adatszinkronizációhoz.[38]. Számláló Bloom-szűrők használhatók két halmaz különbségeinek számítására.[39]
Bloom-szűrők adatfolyamokhoz
A Bloom-szűrők használhatók adatfolyamokhoz is. Például (Deng & Rafiei 2006) javasolt stabil Bloom-szűrőket, számláló Bloom-szűrővel, ahol egy új elem hozzáadása a megfelelő számokat c értékre állítja, és csak egy fix s számláló csökken 1-gyel, így a memória nagyrészt új elemekből áll (egy N számlálós SBF-ben egy elem élettartama nagyjából ). Egy másik megoldás az öregedő Bloom-szűrő, mely két szűrőből áll, melyek a memória felét töltik ki: ha egyikük teli, a másik kiürül, és ezen üres szűrőhöz kerülnek új elemek.[40]
Azonban kiderült,[41] hogy szűrőtől függetlenül n elem esetén a hamis pozitívok (FP) és a hamis negatívok (FP) valószínűségének arányának alsó határa:
,
ahol L a lehetséges elemek száma (az ábécéméret), m a memóriaméret (bitben), feltéve, hogy . Tehát elegendően nagy L esetén , ami egy véletlen szűrőnek felel meg. Tehát elég elem hozzáadása után a memóriában tároláshoz túl nagy ábécé esetén (ami a valószínűségi alapú szűrők esetén gyakori feltételezés) lehetetlen egy szűrőnek jobban teljesítenie a véletlenségnél. Ez csökkenthető úgy, ha egy szűrő csak az adatfolyam egy részén működik, ez esetben az n kitevő w-re módosul, mely 1-től eltérő eredményt ad, ha w nem túl kicsi.
Bloomier-szűrők
(Chazelle et al. 2004) a Bloom-szűrők általánosítását írta le, melyekben asszociálható egy érték a behelyezett elemekkel, asszociatív tömböt létrehozva. Hasonlóan a Bloom-szűrőkhöz, ezek a kis helytöbbletet kis hamispozitív-aránnyal érik el. Ez esetben a hamis pozitív eredmény kiadása a leképezésben nem szereplő kulcs esetén. A leképezés hibás értéket nem ad vissza benne szereplő kulcs esetén.
Kompakt közelítők
(Boldi & Vigna 2005) egy hálóalapú általánosítást javasolt. A kompakt közelítő minden kulcshoz egy hálóelemet rendel (a Bloom-szűrők ez esetben kételemű Boole-hálók). Bittömb helyett hálóelemtömbjük van. Kulcs és hálóelem közti hozzárendelés hozzáadásakor kiszámítják a hálóelemhez rendelt k tömbhely jelenlegi tartalmainak maximumát. Kulcshoz rendelt érték olvasásakor kiszámítják a kulcshoz rendelt k helyhez tartozó érték minimumát. Az eredmény az eredeti értéket felülről becsüli.
Párhuzamos particionált Bloom-szűrők
Önálló tömböt használ a hasítófüggvényeknek, lehetővé téve a lekérdezésekhez és a hozzáadásokhoz is párhuzamos hasítófüggvény-számításokat.[42]
Méretezhető Bloom-szűrők
(Almeida et al. 2007) olyan Bloom-szűrő-változatot javasolt, mely az elemszámhoz képes igazodni minimális hamispozitív-valószínűséggel. Ez hagyományos Bloom-szűrők sorozatain alapul növekvő kapacitással és kisebb hamispozitív-valószínűségekkel, így egy maximális valószínűség állítható előre be elemszámtól függetlenül.
Térbeli Bloom-szűrők
A térbeli Bloom-szűrőket eredetileg (Palmieri, Calderoni & Maio 2014) javasolta helyadatokat tároló adatstruktúraként, különösen helyadatvédelemhez szükséges kriptográfiai protokollok esetén. Több halmazt tudnak egy adatstruktúrában tárolni, lehetővé téve számos esetben használatukat.[43] Lekérdezhető egy elemről, hogy része-e egy halmaznak, és a hamispozitív-arány a halmaztól függ: a szűrőkbe kerülő első halmazokéi magasabbak, mint a későbbiekéi.[44] Ez lehetővé teszi a halmazok fontossági sorrendjének felállítását, ahol a fontosabb elemeket tartalmazó halmazok megőrizhetők.
Réteges Bloom-szűrők
A réteges Bloom-szűrők több Bloom-szűrő-rétegből állnak. Képesek követni, hányszor van hozzáadva egy elem az azt tartalmazó rétegek számával. Egy ellenőrző művelet jellemzően a legmélyebb réteget adja vissza, ahol az elem volt.[45]
Csillapított Bloom-szűrők
Egy D mélységű csillapított Bloom-szűrő tekinthető D egyszerű szűrő tömbjének. A hálózati szolgáltatások tekintetében minden csomópont egyszerű és csillapított szűrőket egyaránt tartalmaz. Az egyszerű szűrő megmutatja, mely szolgáltatásokhoz lehet a csomópontból hozzáférni, az i. szintű csillapított szűrő pedig hogy milyenek érhetők el az i élre lévő csomóponttól. Az i. érték az i élre lévő csomópontok helyi szűrőinek uniója.[46]
A képen lévő kis hálózat példáján egy A szolgáltatás keresése van, melynek azonosítójának kódja a 0, 1 és 3 értékek (11010 minta). Legyen n1 a kezdőpont. Először a szűrő ellenőrzi, hogy A-t kínálja-e n1 a helyi szűrője ellenőrzésével. Mivel nem egyeznek a minták, a csillapított szűrővel kiválasztjuk n2-t. Ez se kínálja A-t, de van olyan szomszédja, mely igen. Így kiderül, hogy n3 kínálja A-t, így az a cél.[47]
Többrétegű csillapított Bloom-szűrőkkel 1-nél több élre lévő szolgáltatások is találhatók a szűrő telítése nélkül a távolabbi források bitjeinek csillapításával.[46]
Kémiaiszerkezet-keresés
A nagy kémiai adatbázisok kereséséhez gyakran használnak Bloom-szűrőket. A legegyszerűbb esetben a szűrőhöz adott elemek (az ujjlenyomat) a molekulában lévő atomok rendszámai, vagy egy, az atomok rendszámán és kötéseik számán és típusán alapuló hasítási érték. Ez eset a hasznossághoz túl egyszerű. Az összetettebb szűrők atomszámokat, nagyobb szerkezeti jellemzőket, például karboxilcsoportokat és gráftulajdonságokat, például gyűrűszámot is figyelembe vesznek. A hasításalapú ujjlenyomatokban atomi és kötéstulajdonságokon alapuló hasítófüggvényt használnak egy részgráf véletlenszerűszám-generátori bemenetté alakításában és a szűrő bitjeit beállító első kimeneti értékekhez.
Az 1940-es évek végén kezdtek molekuláris ujjlenyomatokat használni lyukkártyán keresett kémiai szerkezetekhez. Azonban csak 1990 körül vezetett be a Daylight Chemical Information Systems, Inc. a bitgeneráláshoz hasítófüggvény-alapú módszert előszámított tábla helyett. Szemben a szótári megközelítéssel, a hasítómódszer korábban nem látott szerkezeti részekhez rendelhetett biteket. Az 1990-es évek elején az „ujjlenyomat” fogalma eltért a „szerkezeti jellemzőktől”, de ez kibővült: már tartalmazza az összehasonlításhoz használható legtöbb molekuláris jellemzőt, például a szerkezeti jellemzőket vagy a 3D-s ujjlenyomatokat. Szemben a Bloom-szűrőkkel, e módszerben lehetséges a jellemzőnként hozzárendelt bitek számának méretfüggősége, míg a legtöbb Daylight-szerű ujjlenyomat fix számú bitet használ jellemzőnként, így ezek Bloom-szűrőként működnek. Az eredeti Daylight-ujjlenyomatok hasonlóság-ellenőrzési és vizsgálati célokra is használhatók. Számos más ujjlenyomattípus, például az ECFP2, hasonlóság-ellenőrzésre használható, vizsgálatra nem, mivel helyi környezeti jellemzőket is tartalmaznak, melyek vizsgálatkor hamis negatívokat ad. Még ha azonos módon is készültek, nem Bloom-szűrők, mert nem használhatók szűrésre.
↑ abLuo, Lailong; Guo, Deke; Ma, Richard T. B.; Rottenstreich, Ori; Luo, Xueshan (13 Apr 2018). "Optimizing Bloom filter: Challenges, solutions, and comparisons". arXiv:1804.04777 [cs.DS].
↑ (2018. január 3.) „A neural data structure for novelty detection”. Proceedings of the National Academy of Sciences115 (51), 13093–13098. o. DOI:10.1073/pnas.1814448115. PMID30509984. PMC6304992.
↑ CRLite: A Scalable System for Pushing All TLS Revocations to All Browsers, 2017 IEEE Symposium on Security and Privacy (SP), 539–556. o.. DOI: 10.1109/sp.2017.17 (2017). ISBN 978-1-5090-5533-3
↑ (2010. január 3.) „Aging Bloom Filter with Two Active Buffers for Dynamic Sets”. IEEE Transactions on Knowledge and Data Engineering22 (1), 134–138. o. DOI:10.1109/TKDE.2009.136.
↑ (2020. január 3.) „Approaching Optimal Duplicate Detection in a Sliding Window”. Computing and Combinatorics12273, 64–84. o. DOI:10.1007/978-3-030-58150-3_6.
Ez a szócikk részben vagy egészben a Bloom filter című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
(2005) „Mutable strings in Java: design, implementation and lightweight text-search algorithms”. Science of Computer Programming54 (1), 3–23. o. DOI:10.1016/j.scico.2004.05.003.
(2018) „Probabilistic Properties of the Spatial Bloom Filters and Their Relevance to Cryptographic Protocols”. IEEE Transactions on Information Forensics and Security13, 1710–1721. o. DOI:10.1109/TIFS.2018.2799486. ISSN1556-6013.
(2008) „Automata, Languages and Programming: 35th International Colloquium, ICALP 2008, Reykjavik, Iceland, July 7–11, 2008, Proceedings, Part I, Track A: Algorithms, Automata, Complexity, and Games”. 5125, Springer. doi:10.1007/978-3-540-70575-8_32.
Mullin, James K. (1990). „Optimal semijoins for distributed database systems”. IEEE Transactions on Software Engineering16 (5), 558–560. o. DOI:10.1109/32.52778.
(2014) „Proc. 10th International Conference on Information Security and Cryptology (Inscrypt 2014)”. 8957: 16–36, Springer-Verlag, Lecture Notes in Computer Science. doi:10.1007/978-3-319-16745-9_2.
Porat, Ely (2009). „Computer Science, Theory and Applications: Fourth International Computer Science Symposium in Russia, CSR 2009, Novosibirsk, Russia, August 18–23, 2009, Proceedings”. 5675: 263–273, Springer. doi:10.1007/978-3-642-03351-3_25.
(2013) „A generic and adaptive aggregation service for large-scale decentralized networks”. Complex Adaptive Systems Modeling1 (19), 19. o. DOI:10.1186/2194-3206-1-19.. A prototípus GitHubon elérhető.
Proceedings of Formal Description Techniques for Distributed Systems and Communication Protocols, and Protocol Specification, Testing, and Verification: IFIP TC6/WG6.1 Joint International Conference. Chapman & Hall, IFIP Conference Proceedings, 333–348. o. (1996)
(2007) „Mathematical correction for fingerprint similarity measures to improve chemical retrieval”. Journal of Chemical Information and Modeling47, 952–964. o. DOI:10.1021/ci600526a. PMID17444629.
Wessels, Duane. 10.7 Cache Digests, Squid: The Definitive Guide, 1st, O'Reilly Media, 172. o. (2004. január 1.). ISBN 978-0-596-00162-9 „Cache Digests are based on a technique first published by Pei Cao, called Summary Cache. The fundamental idea is to use a Bloom filter to represent the cache contents.”
In telecomunicazioni la tecnologia VDSL2 (Very-high-bit-rate digital subscriber line 2) è un tipo di tecnologia di trasferimento dati, facente parte della famiglia delle tecnologie xDSL, nonché la naturale evoluzione dell'ADSL/2+. Permette connessioni con velocità di trasmissione fino a 300 Mbit/s su doppino telefonico di rame ed è stata ratificata dall'Unione internazionale delle telecomunicazioni (ITU) col nome di G.993.2, nel mese di dicembre del 2011. Indice 1 Profili 2 Distanza ...
2017 video game 2017 video gameRobo RecallDeveloper(s)Epic GamesPublisher(s)Epic GamesEngineUnreal Engine 4Platform(s)Microsoft Windows (Oculus Rift)Oculus QuestReleaseMarch 1, 2017 (Oculus Rift)[1]May 21, 2019 (Oculus Quest)[2]Genre(s)First-person shooter Robo Recall is a virtual reality first-person shooter game developed and published by Epic Games for Oculus Rift and Oculus Quest platforms. The game was released for the Oculus Rift on March 1, 2017, and an Oculus Quest ver...
Basilika Santa Anna dari KongoGereja Basilika Minor Santa Anna dari Kongo di BrazzavillePrancis: Basilique Sainte-Anne-du-Congocode: fr is deprecated Basilika Santa Anna dari KongoLokasiBrazzavilleNegara Republik KongoDenominasiGereja Katolik RomaArsitekturStatusBasilika minorStatus fungsionalAktifAdministrasiKeuskupan AgungKeuskupan Agung Brazzaville Basilika Santa Anna dari Kongo, Brazzaville (Prancis: Basilique Sainte-Anne-du-Congocode: fr is deprecated ) adalah sebuah gereja basilika...
Medical conditionIdiopathic interstitial pneumoniaOther namesNoninfectious pneumoniaMicrograph of usual interstitial pneumonia (UIP). UIP is the most common pattern of idiopathic interstitial pneumonia and usually represents idiopathic pulmonary fibrosis. H&E stain. Autopsy specimen.SpecialtyRespirology Idiopathic interstitial pneumonia (IIP), or noninfectious pneumonia[1] are a class of diffuse lung diseases. These diseases typically affect the pulmonary interstitium, although so...
Christina PerriChristina Perri di sebuah konser tahun 2012Informasi latar belakangNama lahirChristina Judith PerriLahir19 Agustus 1986 (umur 37)AsalPhiladelphia, Pennsylvania, U.S.GenrePopPekerjaanPenyanyi, Penulis Lagu, gitaris, pianisInstrumenVokal, piano, guitar, bass guitarTahun aktif2010–sekarangLabelAtlanticSitus webwww.christinaperri.com Christina Judith Perri (lahir 19 Agustus 1986)[1][2] adalah seorang penyanyi-penulis lagu asal Philadelphia, Amerika Serikat. D...
Questa voce o sezione sull'argomento competizioni calcistiche non è ancora formattata secondo gli standard. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Coppa della Germania Est 1964-1965FDGB Pokal 1964-1965 Competizione Coppa della Germania Est Sport calcio Edizione 14ª Luogo Germania Est Risultati Vincitore Aufbau Magdeburgo Secondo Motor Jena Cronologia della competizione 1963-1964 1964-1965 Manuale La Coppa...
Israeli singer (born 1978) Sarit Hadadשרית חדדHadad during an on-stage performance in 2013Background informationBirth nameSarah HodadetovaBorn (1978-09-20) September 20, 1978 (age 45)Afula, IsraelOriginHadera, IsraelGenresMizrahipopArabesquedanceOccupation(s)SingerYears active1994–presentLabelsHed Arzi (2009–present)[a]Musical artist Sarit Hadad (Hebrew: שרית חדד [saˈʁit χaˈdad]; born September 20, 1978) is an Israeli singer. She was na...
Questa voce o sezione sull'argomento stati scomparsi non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Regno di Württemberg Motto: Furchtlos und treu Regno di Württemberg - LocalizzazioneIl Regno di Württemberg all'interno dell'Impero tedesco Dati amministrativiNome ufficialeKönigreich Württemberg Ling...
Consonantal sound represented by ⟨ʁ⟩ in IPA Voiced uvular fricativeʁIPA Number143Audio sample source · helpEncodingEntity (decimal)ʁUnicode (hex)U+0281X-SAMPARBraille Image Voiced uvular approximantʁ̞IPA Number144Audio sample source · helpEncodingX-SAMPAR_o Image The voiced uvular fricative is a type of consonantal sound, used in some spoken languages. The symbol in the International Phonetic Alphabet that represents this sound is ⟨ʁ⟩...
College football gameNavy snaps 43-year losing streakNon-conference game Navy Midshipmen Notre Dame Fighting Irish (4–4) (1–7) 46 44 Head coach: Paul Johnson Head coach: Charlie Weis 1234OT2OT3OT Total Navy 01468738 46 Notre Dame 71407736 44 DateNovember 3, 2007Season2007StadiumNotre Dame StadiumLocationSouth Bend, Indiana, U.S.National anthemBand of the Fighting IrishHalftime showBand of the Fighting IrishAttendance80,795United States TV coverageNetworkNBCAnnouncersT...
بحيرة توركاناالموقع الجغرافي / الإداريالإحداثيات 3°35′N 36°7′E / 3.583°N 36.117°E / 3.583; 36.117جزء من متنزهات بحيرة توركانا الوطنية المدن إل مولو، لويانجلاني، كالوكول، إيلي سبرينغز، إيليرت، فورت بانيا.دول الحوض كينيا — إثيوبيا الجزر الجزيرة الشمالية، الجزيرة الوسطى، الج...
أوسكار رولر معلومات شخصية الميلاد 21 يناير 1959 (العمر 65 سنة)اشتارنبرغ مواطنة ألمانيا عضو في أكاديمية السينما الألمانية [لغات أخرى] الأب كلاوس رولر الأم جيزيلا إلسنر الحياة العملية المهنة مخرج أفلام، وكاتب سيناريو، وكاتب، وصحفي اللغات الأ...
Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Gisela FackeldeyLahir(1920-11-13)13 November 1920Cologne, JermanMeninggal21 Oktober 1986(1986-10-21) (umur 65)Berlin Barat, JermanPekerjaanPemeranTahun aktif1949–1986 Gisela Fackeldey (13 November 1920 – 21 Oktober 1986) ad...
Hymnal by Martin Luther and Paul Speratus Achtliederbuch(First Lutheran hymnal) Title page of the first Lutheran hymnal of eight hymns (songs)LanguageGermanGenreHymnalPublished1524 (1524)Publisher Martin Luther Paul Speratus The First Lutheran hymnal, published in 1524 as Etlich Cristlich lider / Lobgesang und Psalm (Some Christian songs / canticle, and psalm), often also often referred to as the Achtliederbuch (Book with eight songs, literally Eightsongsbook), was the first Lutheran hym...
Installing solar panels The introduction and rapid expansion of solar technology has brought with it a number of occupational hazards for workers responsible for panel installation. Guidelines for safe solar panel installation exist,[1] however the injuries related to panel installation are poorly quantified. There is concern for long term health effects acquired from prolonged ultraviolet radiation and from lifting heavy panels. The lack of data regarding these concerns makes increas...
United States Marine Corps Reconnaissance Battalion See also: United States Marine Corps Special Operations Capable Forces The reconnaissance mission within the United States Marine Corps is divided into two distinct but complementary aspects; Marine Division Recon and Force Reconnaissance. The United States Marine Corps Reconnaissance Battalions (or commonly called Marine Division Recon) are the reconnaissance assets of Marine Air-Ground Task Force (MAGTF) that provide division-level ground ...
Un sistema de estrellas o sistema estelar es un pequeño número de estrellas que orbitan entre sí,[1] unidas por una atracción gravitatoria. Un gran grupo de estrellas unidas por la gravitación generalmente se denomina cúmulo estelar o galaxia, aunque, en términos generales, también son sistemas estelares. Los sistemas estelares no deben confundirse con los sistemas planetarios, que incluyen planetas y cuerpos similares (como los cometas). Un sistema estelar de dos estrellas es...
Gambaslinguaggio di programmazioneAutoreBenoît Minisini Data di origine1999 Ultima versione3.19.2 (28 maggio 2024) Utilizzogenerico ParadigmiProgrammazione orientata agli oggetti TipizzazioneForte, statica Influenzato daVisual Basic, Java Implementazione di riferimentoSistema operativoLinux LicenzaGPL Sito webgambas.sourceforge.net/ Modifica dati su Wikidata · Manuale L'esempio MineGame incluso in Gambas 3. In esecuzione è la versione 3.8.0 su sistema Linux Mint 17.2. Gambas è un lin...