Budoucí datový přenos mezi Marsem a Zemí



Zajímám se i o budoucí projekty a jistě sledujete i nejnovější misi supersofistikovaného vozítka Curiosity - nejlépe vybavené pojízdné laboratoře pro zkoumání cizích planet. Po tomto detailním průzkumu Marsu příjde na řadu vyslání lidské posádky na Mars kolem roku 2020 a budování prvních stacionárních základen na Marsu s plnou soběstačností a posléze kolem roku 2030 osídlování Marsu lidmi a lidstvo bude nutně bude potřebovat stabilní a superrychlý datový přenos mezi Zemí a Marsem. Lidé pracující na Marsu budou potřebovat fungující internet nejen na výměnu vědeckych informací, ale i na na live TV přenosy mezi dvěma planetama, přenos rádia, TV a satelitních kanálů směrem na Mars, aby budoucí populace měla stálý kontakt s mateřkou planetou. Předpovídám i Cloudové uložiště dat na Marsu a archivování pozemských dat vědomosti lidstva na Marsu pro případ nějaké katastrofy na Zemi. V r. 2032 bude možné již využít Cloudových služeb mimo planetu Zemi, takže rodinné a jiné os. data budeme moci archivovat i na Marsu. Kdyby Zemi zasáhl asteroid a ochromil světovou síť nebo zničil naše pozemská data, bude možnost si zálohované data stáhnout z Marsovského Cloudu zpět ! S kamarádem řešíme jak takovou síť postavit, aby fungovala. Dotaz zní: Vystačíme s dosavadními technologiemi přenosu dat na dálku ? Anebo mezi planetami bude potřeba zcela nová technologie, která by pokryla tuto potřebu lidstva ? A jakou případně navrhujete ? Na telefonické, videotelefonické hovory, rádio, TV, videokonference Live, satelitní kanály a vůbec napojení celosvětového internetu na Mars. Osobně se domnívám, že k napojení bude potřeba několika meziplanetárních satelitů, které budou fungovat jako přenosové mosty z jedné planety na druhou ! ![](/Client.Images/smileys/7.gif)Co si o této problematice myslíte vy ?
A nebo bude mezi marsem a zemí lítat člověk s fleškou.
<p>děláme to úplně na <a href="http://smartystreets.com">smartystreets</a> . uživatelé nahrávají soubory s potenciálně miliony adres v nich a my je ověřujeme a standardizujeme/duplikujeme, atd. je to velmi náročné na procesor a dokonce i s kmenovými daty načtenými na jednotku ram, miliony adres zabere několik hodin (mimochodem, pro tuto částku je to velmi rychlé ...).</p><p>může být také důležité navrhnout uživatelské rozhraní, které může podporovat desítky úloh spuštěných paralelně. například naše serverové uzly se rozšiřují a můžeme podporovat mnoho souborů najednou. uživatelé budou potřebovat efektivní způsob, jak zobrazit stav a spravovat je. v roce 2011 jsme vylepšili naše uživatelské rozhraní a to je to, s čím jsme přišli.</p><hr><p> <a href="http://youtu.be/qdjsolatz4u?hd=1">zde je 30sekundové video</a> ukazující, jak celý proces funguje a jak rozhraní reaguje na aktuální stav úlohy (úloh). pokud chcete, můžete vyzkoušet sami od <a href="http://smartystreets.com/account/create">tato stránka</a> (zdarma, nebojte se ...).</p><hr><p>screenshoty pracovního postupu ... trvá asi 30 sekund až několik minut, v závislosti na vašich souborech.</p><p><img src="https://i.stack.imgur.com/egatr.png" alt="upload list"></p><p><em> nahrajte svůj seznam </em></p><p><img src="https://i.stack.imgur.com/kqkb9.png" alt="see the file uploading"></p><p><em> viz nahrání souboru </em></p><p><img src="https://i.stack.imgur.com/zv26q.png" alt="map the fields"></p><p><em> mapujte pole (probíhá automaticky; stačí potvrdit, že automatická mapa byla správná) </em></p><p><img src="https://i.stack.imgur.com/wodst.png" alt="stay up-to-date with the current status"></p><p><em> zůstaňte v kontaktu s tím, co se nyní děje </em></p><hr><p>všimněte si, že jakmile seznam začne zpracovávat, uživatel se může vrátit a nahrát více, které seznamy budou zpracovány paralelně v reálném čase. seznamy lze kdykoli zrušit/smazat a po dokončení je lze stáhnout. pokud byl seznam stažen alespoň jednou, zobrazí se zaškrtnutí.</p><p>toto je vlastně stárnoucí návrh, který plánujeme upgradovat. bude se to cítit spíš jako moderní, responzivní webová aplikace.</p><p>ještě stojí za zmínku, že jsme mnohokrát změnili vzhled stránky „dashboard“ účtu a tento návrh inicioval nejmenší volání/e-maily podpory a zákazníci to rádi viděli na první pohled. první uživatelé mají tendenci shledávat, že se s ním dostanou docela rychle.</p> <p>svým způsobem přecházíte na nový web. udržujete produkty, ale v podstatě měníte téměř všechno ostatní: adresy url, interní propojení, html stránek a back-end (software košíku). je nemožné říci, jaké dlouhodobé důsledky by mohly být, aniž bychom znali podrobnosti, ale pokud vám nový software usnadní údržbu vašeho webu, pak vám poskytne čas na vyřešení jakýchkoli vtipků, které by se mohly objevit. jedná se o velký krok, proto jej velmi dobře naplánujte a sledujte každý krok, abyste se ujistili, že funguje podle plánu. pravděpodobně uvidíte poměrně velké výkyvy v indexování a hodnocení, takže se ujistěte, že jste schopni je „spolknout“ (vybrat pomalé období, mít k dispozici nějaký rozpočet na reklamy atd.).</p><ul> <li>změny v obsahu a interním propojení ovlivní vaše hodnocení, alespoň v krátkodobém horizontu.</li> <li>nebojte se o „příliš mnoho přesměrování“ pro celý web, ale ujistěte se, že pro každou adresu url musíte udělat pouze jedno (nepřesměrovat ve více krocích). ujistěte se, že přesměrování (staré adresy url) nejsou zakázána pomocí souboru robots.txt a vyzkoušejte je pomocí nástrojů pro webmastery společnosti google. vyzkoušejte také všechny adresy url, abyste se ujistili, že přesměrují (procházejte starý web pomocí nástroje, jako je xenu, a poté, co máte nastavena přesměrování, zkontrolujte všechny tyto adresy url). ano, je to trochu práce :), ale je lepší o tom mít jistotu. mějte na paměti, že jakmile budou přesměrování nalezena, struktura vašeho webu bude „znovuobjevena“, jako by to bylo u nového webu, takže to určitě něco ovlivní procházení, indexování a hodnocení na chvíli. nastavte soubory sitemap pro staré a nové adresy url a sledujte svůj pokrok v nástrojích pro webmastery. buďte velmi, velmi trpěliví.</li> <li>výhody vs nevýhody ... to je něco, co musíte určit sami. přesun webu, jako je tento, je velkým krokem, přinejmenším musíte naplánovat každý krok a správně nastavit očekávání.</li> </ul><p>možnost jasně sledovat postup (prostřednictvím analytics a počtu indexovaných adres url) vám pomůže zůstat v klidu během pohybu. v každém případě se pokuste nedělat nic drastického, pokud by to trvalo trochu déle - pokud jste si udělali domácí úkoly a technická stránka byla řádně naplánována a testována před přesunem, pak v nejhorším případě budete muset počkat trochu déle, než se očekávalo .</p> <p>jak již oscar cabrero odpověděl, pravděpodobně budete chtít cdn a ne skutečný multisite hosting.</p><p><em> statické </em> webové stránky mohou být relativně snadno hostovány na několika kontinentech. <em> dynamické </em> weby nemohou - replikace (velkého) dynamického datového souboru (tj. co je v databázi) přes pomalé a nespolehlivé odkazy wan je velmi obtížný problém řešit dobře.</p><p>chcete tedy zachovat veškerý svůj dynamický obsah (tj. generování html) v jedné lan a přesunout statický obsah (obrázky log, css, js) do sítě pro doručování obsahu.</p><p> <a href="http://cloudharmony.com/speedtest">cloudharmony</a> obsahuje testovací nástroj a několik dobrých blogových příspěvků o cdn. <a href="http://www.paessler.com/blog/2010/05/17/networking-basics/real-world-performance-comparison-of-cdn-content-delivery-network-providers">paessler</a> má přehled výkonu a kvalifikovaná doporučení cdn.</p><p><strong> za předpokladu, že chcete vytvořit multisite dynamický web, přesto: </strong></p><blockquote> <p>existují nějaké úskalí, na které je třeba dát pozor?</p> </blockquote><p>ach ano, mnoho. většinou v tiché korupci replikovaných dat nebo přerušené/zastaralé/zpožděné replikace.</p><blockquote> <p>měl bych mít samostatné domény pro každou oblast, např. .com .co.uk atd</p> </blockquote><p>zcela na vás. pokud jsou vaše stránky velmi regionální/místní povahy, pak může nejlépe fungovat místní tld (tj. .co.uk, .de atd.).</p><blockquote> <p>mám databázi na hostitele?</p> </blockquote><p>alespoň jeden databázový server na každém serveru, ze kterého hostujete, ano.</p><blockquote> <p>jak mohu udržovat databáze aktuální?</p> </blockquote><p>mechanismus replikace vašeho databázového stroje. většina databází to má. existuje více komplexních řešení pro high-end potřeby, ale to je místo, kde byste měli začít.</p> Nevím, jestli ***[s pátrací služnou/...](http://www.cervenykriz.eu/cz/patracisluzba.aspx)*** uspějete.

ČČK pátrá po osobách, s nimiž byl přerušen kontakt v důsledku válečných událostí,

vntřních konfliktů, přírodní katastrofy, zdravotních nebo jiných závážných důvodů (z webu ČČK).

\_\_\_\_\_

E-mail pátrací služby: 

**holubova.ivana@cervenykriz.eu** <p>rozhodně žijete ve smyslu falešné bezpečnosti! sociální inženýrství je dnes stále velmi rozšířené a pochybuji, že se to v průběhu desítek let změní, pokud vůbec.</p><p>zde je několik stručných vysvětlení, proč funguje sociální inženýrství. je těžké pokrýt vše, protože sociální inženýrství je opravdu široké pole.</p><p>některé důvody, proč funguje sociální inženýrství (z knihy citované dole):</p><ul> <li>většina lidí si přeje být zdvořilý, zejména k cizincům</li> <li>profesionálové chtějí vypadat dobře informovaní a inteligentní</li> <li>pokud jste chváleni, budete často mluvit více a prozradit více</li> <li>většina lidí by nelhala kvůli lhaní</li> <li>většina lidí laskavě reaguje na lidi, kteří se zdají být znepokojeni</li> </ul><p><strong> být užitečný </strong></p><p>lidé si obvykle chtějí navzájem pomáhat. rád děláme hezké věci!</p><ul> <li> <p>narazil jsem na recepci ve velké firemní kanceláři s papíry namočenými v kávě. mluvím s recepční a vysvětlím, že mám schůzku na pracovní pohovor za 5 minut, ale právě jsem rozlil kávu na všechny své papíry. pak se zeptám, jestli by recepční mohl být tak sladký, a vytisknout je znovu pro mě s touto usb pamětí, kterou mám.</p> <p>mohlo by to vést ke skutečné infekci pc recepční a mohlo by mi to získat oporu v síti.</p> </li> </ul><p><strong> používání strachu </strong></p><p>strach z neúspěchu nebo nedělání podle pokynů:</p><ul> <li> <p>facebooková stránka ředitele společnosti (john smith) (nebo jakýkoli jiný zdroj informací) ukazuje, že právě odjel na plavbu po dobu 3 týdnů. zavolám sekretářce a velícím hlasem říkám: „ahoj, volá chris. právě jsem opustil telefon s johnem smithem, má velmi dobrý čas na své plavbě se svou ženou carlou a dětmi. nicméně jsme v uprostřed integrace velmi důležitého obchodního systému, a řekl mi, abych vám zavolal, abyste nám mohli pomoci. nemohl volat sám sebe, protože jde o safari, ale to je opravdu naléhavé. vše, co musíte udělat, je vzít usb flash disk, který mu je zaslán v poště a zapojen, spusťte počítač a my jsme hotovi. projekt přežije!</p> <p>děkuji mnohokrát! byla jste skvělá pomoc! jsem si jistý, že vás john smith uzná za tento čin vstřícnosti. "</p> </li> </ul><p><strong> <a href="http://en.wikipedia.org/wiki/norm\_of\_reciprocity">hra na reciproci</a> </strong></p><ul> <li> <p>dveře zavazadlového prostoru. zadržuji pro vás vstupní dveře a rychle za tebou chodím. když otevřete další dveře, což je zabezpečené zabezpečení, zamířím stejným směrem a většina lidí se pokusí splácet užitečnou akci tím, že pro vás dveře opět podrží, čímž se dostanete na místo, kde byste neměli být. bojíte se, že vás chytí? ne. jen říkáš, že je ti líto a že jsi šel špatně.</p> <p>cíl by se téměř cítil povinen držet dveře za vás!</p> </li> </ul><p><strong> využití zvědavosti </strong></p><ul> <li> <p>zkuste hodit 10 usb flash disků na různá místa ve vaší organizaci. nemusíte je umisťovat na příliš zjevná místa. usb by mělo mít automaticky spuštěný domácí program telefonu, abyste viděli, kdy někdo připojí usb flash disk a měl by být teoreticky využit.</p> <p>další verzí tohoto je vyhodit usb flash disky s jediným dokumentem pdf, který se nazývá např. „john smith - norway.pdf“. dokument pdf obsahuje exploat adobe acrobat reader (existuje spousta a poté, co uživatel klikne na dokument, který bude vlastnit. samozřejmě jste se ujistili, že je zneužití přizpůsobeno konkrétní verzi adobe cílové organizace. bude pro většinu lidí přirozené otevřít dokument, aby mohli zkuste usb disk vrátit jeho vlastníkovi.</p> <ul> <li>dalším příkladem zvědavosti (možná jiný termín to vysvětluje lépe) jsou všechny tyto spam maily nebo špatné internetové reklamy, že jste něco vyhráli nebo nigerijský princ vám nabízí spoustu peněz, pokud mu můžete pomoci. jsem si jist, že jste s nimi již obeznámeni, ale jedná se také o útoky na sociální inženýrství a důvod, proč se nezastavili, je, že stále fungují!</li> </ul> </li> </ul><p>to je jen několik příkladů. samozřejmě existuje spousta tun!</p><p>můžeme se také podívat na historické události sociálního inženýrství:</p><p><strong> hbgary </strong></p><p>celý příběh si můžete přečíst <a href="http://arstechnica.com/tech-policy/news/2011/02/anonymous-speaks-the-inside-story-of-the-hbgary-hack.ars/">zde</a> (strana 3 obsahuje část sociálního inženýrství)</p><ul> <li> <p>v loňském roce byl hbgary hacknut. tento útok zahrnoval mnoho různých kroků, ale také aspekt sociálního inženýrství. hacker v krátkosti vyprávěl e-mailový účet společnosti vip) ve společnosti a poslal e-mail administrátorovi cílového systému, který řekl něco podobného: „ahoj johne, v současné době jsem v evropě a poskakuji mezi letišti. můžete mi otevřít ssh na vysoce číslovaném portu pocházejícím z jakékoli ip? potřebuji udělat nějakou práci. “když administrátor dostane tento e-mail, cítí, že je přirozené vyhovět tomuto, když e-mail pochází z důvěryhodného zdroje.</p> <p>ale to není ono! útočník měl heslo k účtu, ale přihlášení nefungovalo! takže pošle e-mailem zpět administrátorovi: „hej znovu, zdá se, že to nefunguje. heslo je stále správné? jaké bylo uživatelské jméno znovu?“. nyní také poskytl skutečné heslo pro systém (útočník to měl z dřívějšího kompromisu jiného systému ve stejném hacku), což útočníkovi poskytlo mnohem větší důvěru správce. správce samozřejmě souhlasí a sdělí útočníkovi své uživatelské jméno.</p> </li> </ul><p>seznam nahoře pochází z knihy " <a href="http://rads.stackoverflow.com/amzn/click/0470639539">sociální inženýrství: umění lidského hackování</a> " a mohu ho velmi doporučit!</p> <h2>definice</h2><p> <a href="http://en.wikipedia.org/wiki/content\_delivery\_network#cdn\_benefits">wikipedia to říká</a> dobře:</p><blockquote> <p>síť pro doručování obsahu nebo síť pro distribuci obsahu (cdn) je systém počítačů, které obsahují kopie dat, umístěné na různých místech v síti tak, aby maximalizovaly šířku pásma pro přístup k datům od klientů v celé síti. klient přistupuje k kopii dat v blízkosti klienta, na rozdíl od všech klientů, kteří přistupují ke stejnému centrálnímu serveru, aby se zabránilo úzkým místům v blízkosti tohoto serveru.</p> <p>typy obsahu zahrnují webové objekty, objekty ke stažení (mediální soubory, software, dokumenty), aplikace, mediální proudy v reálném čase a další součásti internetového doručení (dns, trasy a dotazy na databáze)</p> </blockquote><h2>výhody</h2><ul> <li>uptime</li> <li>rychlost stahování</li> <li>zrcadlení souborů</li> <li> <a href="http://developer.yahoo.com/performance/rules.html#cdn">rychlejší vnímání stahování stránky</a> </li> </ul><h2>běžné cdn</h2><ul> <li> <a href="http://aws.amazon.com/cloudfront/">amazon cloudfront</a> (ve spojení s <a href="http://aws.amazon.com/s3/">amazon s</a> ) je cdn, které používám a miluji.</li> <li> <a href="http://www.rackspacecloud.com/cloud\_hosting\_products/files">cloud files</a> od rackspace</li> <li> <a href="http://en.wikipedia.org/wiki/content\_delivery\_network#content\_delivery\_service\_providers">delší seznam bezplatných a placených cdn na wikipedii</a> </li> </ul> <p>na vaši otázku neexistuje jednoduchá odpověď, ale zde je několik věcí, na které byste se měli zamyslet.</p><p>zaprvé, měřítko není jediná věc, o kterou se musíme starat. co děláte s vašimi daty je. pokud máte 500 tabulek 30 tb dat a děláte jednoduché oltp s velmi malým počtem hlášení), nemyslím si, že budete mít příliš mnoho problémů "tam jsou 32tb databáze na postgresql tam venku. zároveň se však výkon poněkud sníží, protože to musí zasáhnout disk na všechno. podobně, pokud máte 50 tb, pokud data, ale mají běžně zasaženou sadu asi 100 gb, pak můžete postavte server s dostatečným množstvím ram), abyste tuto část db udrželi v paměti a jste zlatí.</p><p>na druhou stranu, pokud se pokoušíte režim (nejběžnější hodnotu) z 1tb dat, nezáleží na tom, jaký systém používáte, bude to <em> bolestivé </em> s nebo bez střepů. (edit: sharding může ve skutečnosti tento problém zhoršit <em>. </em>)</p><p>mezi hlavní problémy, s nimiž se setkáte s obrovskými db na mysql a postgresql, patří skutečnost, že ani nepodporuje paralelismus dotazování. jinými slovy, dotaz je spuštěn jako jeden blok jedním vláknem a nelze jej rozdělit na kousky a spustit samostatně. toto je nejčastěji problém při spouštění velkých analytických dotazů na velké množství dat. to je místo, kde postgres-xc a green plum přicházejí k záchraně, protože oddělují úložiště od provádění, a mohou tak učinit na úrovni koordinátora. všimněte si, že postgres-xc a green plum v zásadě používají střepiny interně, ale koordinátoři prosazují veškerou konzistenci globálně.</p><p>s paralelizací dotazování můžete dotaz rozdělit, mít různé procesory/diskové i/o kanály spouštět jeho části a vykazovat zpětné části sady výsledků, které mají být sestaveny, a předány zpět do aplikace. to je opět velmi užitečné při analytickém namísto zpracování transakcí.</p><p>druhou věcí je, že některé systémy, například vertica nebo greenplum, uchovávají sloupce informací společně. to ztěžuje použití systému z perspektivy oltp) a snižuje tam výkon, ale drasticky zvyšuje výkon pro velké analytické pracovní zatížení. jedná se tedy o kompromis specifický pro pracovní vytížení.</p><p>odpověď je, že jakmile se dostanete nad 1-2 tb ve velikosti, kterou můžete <em>, můžete </em>, ocitnout se tváří v tvář číslu kompromisů mezi systémy a pracovním zatížením. opět je to specifické pro databáze, velikost pracovních sad atd. nicméně v tomto bodě musíte opravdu jít se systémy sněhové vločky, tj. systémy jedinečné a přizpůsobené vašemu pracovnímu zatížení.</p><p>to samozřejmě znamená, že limity nejsou obecně kvantifikovatelné.</p><p><strong>pravit</strong>: nyní jsem pracoval s 9tb databází, která zpracovává směs pracovní podpory při rozhodování a transakčního zpracování v postgresql. jedinou největší výzvou je, že pokud máte otázky, které zasáhly velkou část sady dat, budete muset chvíli počkat na odpověď.</p><p>nicméně s pečlivou pozorností k základům (včetně indexů, autovaku, jak tyto fungují na nízké úrovni atd.) a dostatečným výpočetním prostředkům, jsou zcela zvládnutelné (a odhaduji, že by dobře zvládnutelné do rozsahu 30tb v pg).</p><p><strong>edit2</strong>: jakmile se vydáte na 100 tb, i když to, co bude fungovat, bude záviset na vašem datovém souboru. momentálně pracuji na jednom, který se do tohoto rozsahu nevejde, protože to nejprve zasáhne limit 32 tb v tabulce v postgresql.</p> <p>často se vyskytují problémy s nastavením odběrů e-mailů. poskytovatelé hostingu jsou velmi unavení z nevyžádané pošty a často kladou tvrdá omezení na rychlost a objem e-mailů, zejména pro levnější hostingové plány.</p><p>v praxi je taková funkce často realizována za pomoci externí služby. feedburner je populární pro to, protože mnoho lidí ji používá pro kanály stejně a poskytuje slušnou možnost odběru e-mailů.</p><p>zobrazit <a href="http://www.google.com/support/feedburner/bin/answer.py?hl=en&amp;answer=78982">přehled e-mailů feedburner a faq</a> </p> <p>příkaz <code>merge</code> má složitou syntaxi a ještě složitější implementaci, ale v zásadě jde o spojení dvou tabulek, filtrování dolů na řádky, které je třeba změnit (vložit, aktualizovat nebo smazat), a poté provést požadované změny. vzhledem k těmto vzorovým údajům:</p><pre><code>declare @categoryitem as table ( categoryid integer not null, itemid integer not null, primary key (categoryid, itemid), unique (itemid, categoryid) ); declare @datasource as table ( categoryid integer not null, itemid integer not null primary key (categoryid, itemid) ); insert @categoryitem (categoryid, itemid) values (1, 1), (1, 2), (1, 3), (2, 1), (2, 3), (3, 5), (3, 6), (4, 5); insert @datasource (categoryid, itemid) values (2, 2); </code></pre><p><strong> cíl </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 2 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 3 ║ ║ 3 ║ 5 ║ ║ 4 ║ 5 ║ ║ 3 ║ 6 ║ ╚════════════╩════════╝ </code></pre><p><strong> zdroj </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>požadovaným výsledkem je nahrazení dat v cíli daty ze zdroje, ale pouze pro <code>categoryid = 2</code>. po výše uvedeném popisu <code>merge</code> bychom měli napsat dotaz, který spojuje zdroj a cíl pouze na klíče, a filtrovat řádky pouze v klauzulích <code>when</code>:</p><pre><code>merge into @categoryitem as target using @datasource as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by source and target.categoryid = 2 then delete when not matched by target and source.categoryid = 2 then insert (categoryid, itemid) values (categoryid, itemid) output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>to dává následující výsledky:</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 2 ║ ║ 3 ║ 5 ║ ║ 3 ║ 6 ║ ║ 4 ║ 5 ║ ╚════════════╩════════╝ </code></pre><p>realizační plán je: <img src="https://i.stack.imgur.com/fovhu.jpg" alt="merge plan"></p><p>všimněte si, že jsou obě tabulky plně naskenovány. můžeme to považovat za neefektivní, protože pouze řádky, kde <code>categoryid = 2</code> bude ovlivněno v cílové tabulce. zde přicházejí varování v books online. jeden chybný pokus o optimalizaci, aby se dotkl pouze nezbytných řádků v cíli, je:</p><pre><code>merge into @categoryitem as target using ( select categoryid, itemid from @datasource as ds where categoryid = 2 ) as source on source.itemid = target.itemid and target.categoryid = 2 when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>logika v klauzuli <code>on</code> je použita jako součást spojení. v tomto případě je spojení úplným vnějším spojením (viz <a href="http://technet.microsoft.com/en-us/library/bb522522%28v=sql.105%29.aspx">tento záznam books online</a> proč). použití kontroly kategorie 2 na cílových řádcích jako součásti vnějšího spojení nakonec povede k odstranění řádků s jinou hodnotou (protože neodpovídají zdroji):</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 1 ║ 1 ║ ║ delete ║ 1 ║ 2 ║ ║ delete ║ 1 ║ 3 ║ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ║ delete ║ 3 ║ 5 ║ ║ delete ║ 3 ║ 6 ║ ║ delete ║ 4 ║ 5 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>kořenová příčina je ze stejného důvodu, proč se predikáty chovají v klauzuli vnější spojení <code>on</code> odlišně, než když jsou specifikovány v klauzuli <code>where</code>. syntaxe <code>merge</code> (a implementace spojení v závislosti na zadaných klauzulích) jen ztěžují vidět, že tomu tak je.</p><p> <a href="http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx">navádění v books online</a> (rozšířeno v položce <a href="http://technet.microsoft.com/en-us/library/cc879317%28v=sql.105%29.aspx">optimizing performance</a> ) nabízí navádění, které zajistí, že správná sémantika je vyjádřena pomocí syntaxe <code>merge</code>, aniž by uživatel nutně musel muset pochopit všechny podrobnosti implementace nebo zohlednit způsoby, kterými by optimalizátor mohl legitimně přeskupit věci z důvodů efektivnosti provádění.</p><p>dokumentace nabízí tři možné způsoby implementace časného filtrování:</p><p><strong> zadání podmínky filtrování v klauzuli <code>when</code> </strong> zaručuje správné výsledky, ale může znamenat, že více řádků je čteno a zpracováno ze zdroje a cíle tabulky, než je nezbytně nutné (viz první příklad).</p><p><strong> aktualizace prostřednictvím zobrazení </strong>, která obsahuje podmínku filtrování, také zaručuje správné výsledky (protože změněné řádky musí být přístupné pro aktualizaci prostřednictvím zobrazení), ale vyžaduje to vyhrazené zobrazení, které splňuje liché podmínky pro aktualizaci zobrazení.</p><p><strong> použití společného výrazu tabulky </strong> přináší podobné riziko při přidávání predikátů k klauzuli <code>on</code>, ale z poněkud odlišných důvodů. v mnoha případech to bude bezpečné, ale vyžaduje to odbornou analýzu prováděcího plánu, aby se to potvrdilo (a rozsáhlé praktické testování). například:</p><pre><code>with target as ( select * from @categoryitem where categoryid = 2 ) merge into target using ( select categoryid, itemid from @datasource where categoryid = 2 ) as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>výsledkem jsou správné výsledky (neopakované) s optimálnějším plánem:</p><p><img src="https://i.stack.imgur.com/tazmk.jpg" alt="merge plan 2"></p><p>plán čte pouze řádky pro kategorii 2 z cílové tabulky. to může být důležitým hlediskem výkonu, pokud je cílová tabulka velká, ale je příliš snadné tuto chybu získat pomocí syntaxe <code>merge</code>.</p><p>někdy je snazší zapsat <code>merge</code> jako samostatné operace dml. tento přístup může dokonce <strong> vést lépe </strong> než jediný <code>merge</code>, což je skutečnost, která lidi často překvapuje.</p><pre><code>delete ci from @categoryitem as ci where ci.categoryid = 2 and not exists ( select 1 from @datasource as ds where ds.itemid = ci.itemid and ds.categoryid = ci.categoryid ); insert @categoryitem select ds.categoryid, ds.itemid from @datasource as ds where ds.categoryid = 2; </code></pre> <p>v tomto pořadí: b (s podrobným popisem manipulace níže), a (vyhláskováno), c.</p><p>c je pro mě „typické technické řešení“: nejprve se rozhodnete, jak specifikovat dobu trvání, poté určíte data potřebná pro tento algoritmus. spravovat je však pouze dva další ovládací prvky a uživatelé neznají možnosti, které mají před sebou. to znamená, že pokud jsou vaši uživatelé technici/analytičtí myslitelé a je nejjednodušší je implementovat, jděte na to.</p><p>b by bylo vhodnější:</p><p><img src="https://i.stack.imgur.com/fl7eg.png" alt="enter image description here"></p><p>minimální požadavky:</p><ul> <li>ovládání „předvolby“ a ovládání data a času jsou vždy k dispozici (nikdy zakázáno)</li> <li>změnou předvolby se změní čas zobrazený v ovládacích prvcích rozsahu</li> <li>změnou ovládacích prvků rozsahu se změní předvolba na „ostatní“</li> </ul><p>téměř perfektní:</p><ul> <li>porovnejte ruční výběr s vašimi předvolbami a zobrazte „jiné“ pouze v případě, že neexistuje žádná shoda</li> <li>když uživatel ručně vybere „jiné“, zobrazí se nápověda jako „zde vyberte začátek a konec data“</li> </ul><p>výhody:</p><ul> <li>uživatelé s nejasnou představou o vaší aplikaci mají řadu typických možností</li> <li>uživatelé získají okamžitou a konkrétní zpětnou vazbu pro svůj výběr</li> <li>výběr může být upřesněn, např. „další 3 týdny“ lze snadno upravit na „4 týdny“</li> </ul><p>varianty:</p><ul> <li>místo „jiných“ generujte vhodné textové reprezentace (např. „příštích 17 dní“).</li> <li>pokud je aplikace používána většinou běžnými častými uživateli (málo příležitostných uživatelů), zvažte bezplatné zadávání textu, jako je hisham, doporučeno: kliknout a zadat tři časy v daném dni je v pořádku, pro zadávání 30 za hodinu je bolest a volný text vyhraje.<br> (nedokážu si představit jednoduché kombinované rozhraní, které nějakým způsobem neznevýhodňuje začínající uživatele, ale pokud očekáváte širokou škálu uživatelů, možná budete muset za to zvážit některá řešení)</li> </ul><p>poznámky k rozvržení:</p><ul> <li>vynechal bych „z“ čistě pro čistý vzhled, ale je tu kompromis. obecně se snažím dát ovládacím prvkům stejnou velikost a postavit je na několik řádků, abych se vyhnul vzhledu „neklidného tvaru“.</li> <li>seskupte předvolby skupiny a výběr data společně (tj. jim poskytněte určitou vzdálenost od ostatních výběrů)</li> <li>"trvání" je samozřejmě hloupý štítek, promiň;)</li> </ul><hr><p>(vedlejší poznámka: instinktivně bych předpokládal interval sedmi dnů, abych odešel „od 17. února, 0:00 do 23. února, 23: 59: 59,9999 ..“, ale nejsem si jistý, jestli je tento univerzální.)</p>