導航:首頁 > 編程語言 > angularjs復選框

angularjs復選框

發布時間:2025-01-02 23:42:35

『壹』 如何將復選框中的值通過一個按鈕添加到表格裡面

『貳』 濡備綍鐢╦s鎻愪氦琛ㄥ崟濡備綍鐢╦s鎻愪氦琛ㄥ崟鏁版嵁搴

Js琛ㄥ崟鎻愪氦

琛ㄥ崟鎻愪氦瀵逛簬鍒氬紑濮嬪︿範js鐨勬湅鍙嬫潵璇存槸涓涓姣旇緝鍥版儜鐨勯棶棰樸傚備綍鎻愪氦錛屽備綍闃叉㈤粯璁ゆ彁浜わ紝濡備綍鎻愪氦琛ㄥ崟涓嶈煩杞絳夈傝繖閲屾湁涓浜涗緥瀛愩

鐨勫師濮嬭〃鍗曟彁浜ゆ湁鎸夐挳鎸夐挳鎻愪氦鍜岀殑綾誨瀷銆備袱鑰呮湁浠涔堝尯鍒錛

(1)榛樿よ〃鍗曟彁浜

(2)榛樿や笉浼氭彁浜よ〃鍗曘

(3)濡傛灉鍦ㄨ〃鍗曚腑錛屾垜浠浣跨敤浜唗ype=''submit灞炴э紝浣嗘槸涓嶈╄〃鍗曢粯璁ゆ彁浜わ紝鎬庝箞鍔烇紵鐪嬩笅闈

(4)濡傛灉鍦ㄨ〃鍗曚腑錛屾垜浠浣跨敤type=''button灞炴э紝浣嗚繕鏄闇瑕佹彁浜よ〃鍗曪紝鍙浠ョ敤ajax鎻愪氦銆傚ソ澶勬槸鍙浠ヨ嚜宸辨帶鍒舵彁浜わ紝欏甸潰涓嶄細璺寵漿銆

(5)濡傛灉浣跨敤榛樿ゆ彁浜ゆ柟寮忥紝騫朵笖鍦ㄦ彁浜ゅ墠瀵硅〃鍗曡繘琛屼簡楠岃瘉錛岃峰弬鑰冧互涓嬫柟娉曘

(6)濡傛灉浣跨敤浜唗ype='button'灞炴э紝浣嗕粛鎯沖疄鐜伴粯璁ょ殑鎻愪氦鏂規硶鎬庝箞鍔烇紵鐪嬩笅闈

(7)涓嬮潰鐨勬彁浜や細鎬庝箞鏍鳳紵

鍒嗘瀽:鍗曞嚮鎻愪氦鎸夐挳:

(1)褰撹〃鍗曢獙璇佸け璐ユ椂錛宖orm.submit()鍑芥暟涓嶄細琚瑙﹀彂錛屾墍浠鏍囩

input鐢ㄤ簬鏀墮泦鐢ㄦ埛淇℃伅錛屾牴鎹涓嶅悓鐨勭被鍨嬫樉紺轟笉鍚岀殑褰㈠紡銆俰nput鏄絀烘爣絳撅紝瀹冩病鏈夌粨鏉熸爣絳撅紝鍦ㄥ紑濮嬫爣絳句腑緇撴潫銆俽鍏冪礌鏍規嵁涓嶅悓鐨則ype灞炴э紝鍙浠ュ彉鍖栦負澶氱嶅艦鎬併俽鍏冪礌璁劇疆name灞炴э紝鐢ㄤ簬緗戠粶璇鋒眰鏃舵彁浜ゅ瑰簲杈撳叆鐨勫瓧孌點俽input="text"鏂囨湰妗唕瀹氫箟鍗曡岀殑杈撳叆瀛楁碉紝鐢ㄦ埛鍙鍦ㄥ叾涓杈撳叆鏂囨湰銆傚畠鏄涓涓鍗曡屾枃鏈妗嗭紝input鐨勯粯璁ょ被鍨嬪嵆鏄痶ext綾誨瀷銆俽input="password"瀵嗙爜妗唕綾誨瀷涓簆assword鏃訛紝瀹冪敤浜庢敹闆嗙敤鎴瘋緭鍏ョ殑瀵嗙爜錛屽湪浣犺緭鍏ユ椂錛屾祻瑙堝櫒浼氭妸杈撳叆鐨勫唴瀹逛互絎﹀彿鏉ヤ唬鏇褲俽鏂囨湰妗嗗拰瀵嗙爜妗嗛兘鍙浠ユ坊鍔爌laceholder灞炴э紝鐢ㄤ簬璁劇疆杈撳叆瀛楁甸勬湡鍊肩殑鎻愮ず淇℃伅銆傝ユ彁紺轟細鍦ㄨ緭鍏ュ瓧孌典負絀烘椂鏄劇ず錛屽苟浼氬湪瀛楁佃幏寰楃劍鐐規椂娑堝け銆俽type="radio"鍗曢夋唕綾誨瀷涓簉adio鏃訛紝鐢ㄤ簬瀹氫箟鍗曢夋寜閽錛宯ame灞炴у肩浉鍚岀殑input鍗曢夋嗗彧鑳芥湁涓涓琚閫変腑銆俽璁劇疆榛樿ら変腑鐨勫崟閫夋嗐傛槸鎻愪氦鍒版湇鍔″櫒鏃剁粰鍚庡彴紼嬪簭鍛樹滑鐪嬬殑銆俽type="checkbox"澶嶉夋唕綾誨瀷涓篶heckbox鏃訛紝鐢ㄤ簬瀹氫箟澶嶉夋寜閽錛屽嶉夋嗗厑璁哥敤鎴峰湪涓瀹氭暟鐩鐨勯夋嫨涓閫夊彇涓涓鎴栧氫釜閫夐」銆俽type="file"鏂囦歡涓婁紶r綾誨瀷涓篺ile鏃訛紝榛樿や負鍗曟枃浠朵笂浼犮俽璁劇疆涓哄氭枃浠朵笂浼犮俽type="hidden"闅愯棌瀛楁祌闅愯棌瀛楁靛逛簬鐢ㄦ埛鏄涓嶅彲瑙佺殑銆傞殣鈃忓瓧孌甸氬父浼氬瓨鍌ㄤ竴涓榛樿ゅ礆紝瀹冧滑鐨勫間篃鍙浠ョ敱javaScript榪涜屼慨鏀廣俽

2.2select>涓嬫媺鍒楄〃

select>鍏冪礌瀹氫箟涓嬫媺鍒楄〃錛宱ption>鍏冪礌瀹氫箟寰呴夋嫨鐨勯夐」銆傚垪琛ㄩ氬父浼氭妸棣栦釜閫夐」鏄劇ず涓鴻閫夐夐」錛岄氳繃娣誨姞selected灞炴ф潵瀹氫箟棰勫畾涔夐夐」銆俽鍗曢夋寜閽銆佸嶉夋嗛粯璁ら変腑鐢錛歝hecked灞炴с俽涓嬫媺鍒楄〃浣跨敤錛歴elected灞炴с俽浣跨敤size灞炴ц劇疆涓嬫媺鍒楄〃灞曞紑錛屼嬌鐢╩ultiple灞炴ц劇疆澶氶夈俽

2.3textarea>鏂囨湰鍩

textarea>鍏冪礌瀹氫箟澶氳岃緭鍏ュ瓧孌碉紙鏂囨湰鍩燂級rcols錛氳勫畾鏂囨湰鍖哄唴鐨勫彲瑙佸藉害銆俽rows錛氳勫畾鏂囨湰鍖哄唴鐨勫彲瑙佽屾暟銆俽鏂囨湰鍩熷彲浠ユ坊鍔爌laceholder灞炴э紝鐢ㄤ簬璁劇疆杈撳叆瀛楁甸勬湡鍊肩殑鎻愮ず淇℃伅銆俽

2.4label>鏍囩

label鏄痠nput鐨勬弿榪幫紝瀹冩湰韜涓嶄細鏈夌壒孌婃晥鏋滐紝浣嗗畠鍜屽叾瀹僫nput鏍囩句嬌鐢ㄥ彲浠ユ彁鍗囩敤鎴風殑浣跨敤浣撻獙錛岀敤鎴蜂笉鐢ㄩ潪寰楃偣鍑誨埌鎸夐挳錛岃屾槸鐐瑰嚮鏂囧瓧鍗沖彲閫変腑錛屽傗滆頒綇瀵嗙爜鈥濄俽閫氳繃label鐨刦or鎸囧悜鎸夐挳鐨剗d鏉ョ粦瀹氾紝for鍜宨d灞炴х殑鍊艱佺浉鍚屻俽3.琛ㄥ崟鎸夐挳type="reset"閲嶇疆鎸夐挳r閲嶇疆鎸夐挳浼氭竻闄よ〃鍗曚腑鐨勬墍鏈夋暟鎹銆俽璁劇疆閲嶇疆鎸夐挳涓婃樉紺虹殑鏂囧瓧銆俽type="submit"鎻愪氦鎸夐挳rtype="submit"瀹氫箟鎻愪氦鎸夐挳銆傛彁浜ゆ寜閽鐢ㄤ簬鍚戞湇鍔″櫒鍙戦佽〃鍗曟暟鎹錛屾暟鎹浼氬彂閫佸埌琛ㄥ崟鐨刟ction灞炴т腑鎸囧畾鐨勯〉闈銆俽璁劇疆鎻愪氦鎸夐挳涓婃樉紺虹殑鏂囧瓧銆俽type="button"鏅閫氭寜閽畆button綾誨瀷鐨勫彧鏄涓涓鏅閫氱殑鎸夐挳錛岃宻ubmit鏈変竴涓鎻愪氦鐨勪綔鐢錛屽湪娌℃湁鍔爅s浠g爜鐨勬儏鍐典笅錛宐utton鍙鏄涓瑁呴グ銆俽type="image"鎻愪氦鎸夐挳rimage綾誨瀷鐨剗nput涔熸槸鍏鋒湁涓涓鎻愪氦鐨勪綔鐢錛屼笉鍚岀殑鏄鍙浠ユ寚瀹氫竴騫呭浘鐗囨潵浣滀負鎸夐挳錛屼笉鎻愬′嬌鐢╥mage錛屽洜涓哄畠鏈夋椂鍊欎細鎻愪氦涓ゆ°俽

AngularJS浣跨敤angular-formly榪涜岃〃鍗曢獙璇侊紵

Angular鐨勮〃鍗曞睘鎬$valid,$invalid,$pristine,$dirtyAngular鎻愪緵浜嗘湁鍏寵〃鍗曠殑灞炴ф潵甯鍔╂垜浠楠岃瘉琛ㄥ崟.浠栦滑緇欐垜浠鎻愪緵浜嗗悇縐嶆湁鍏充竴涓琛ㄥ崟鍙婂叾杈撳叆鐨勪俊鎮錛屽苟涓斿簲鐢ㄥ埌浜嗚〃鍗曞拰杈撳叆.灞炴х被鎻忚堪$validng-validBoolean鍛婅瘔鎴戜滑榪欎竴欏瑰綋鍓嶅熀浜庝綘璁懼畾鐨勮勫垯鏄鍚﹂獙璇侀氳繃$invalidng-invalidBoolean鍛婅瘔鎴戜滑榪欎竴欏瑰綋鍓嶅熀浜庝綘璁懼畾鐨勮勫垯鏄鍚﹂獙璇佹湭閫氳繃$pristineng-pristineBoolean濡傛灉琛ㄥ崟鎴栬呰緭鍏ユ嗘病鏈変嬌鐢ㄥ垯涓篢rue$dirtyng-dirtyBoolean濡傛灉琛ㄥ崟鎴栬呰緭鍏ユ嗘湁浣跨敤鍒板垯涓篢rueAngular涔熸彁渚涗簡鏈夊叧琛ㄥ崟鍙婂叾杈撳叆妗嗙殑綾伙紝浠ヤ究浣犺兘澶熶緷鎹姣忎竴涓鐘舵佽劇疆鍏舵牱寮.璁塊棶琛ㄥ崟灞炴ф柟浣嶈〃鍗:formname>.angularproperty>璁塊棶涓涓杈撳叆妗:formname>.inputname>.angularproperty>

form琛ㄥ崟閫氳繃js鎻愪氦錛屽彟澶栬煩杞瑂ervlet鏃訛紝鑷宸卞畾涔変簡涓涓鏁幫紝浼犲弬榪囧幓錛屽彲浠ュ悧錛屼笉鏄痜o錛

鑷瀹氫箟鍙傛暟錛屽彲浠ラ氳繃鍦╢orm琛ㄥ崟涓璁劇疆闅愯棌鍩熶紶鍊糹nputtype="hidden"name="arg_name"value="arg_value"/>鍚庡彴閫氳繃arg_name鎺ユ敹arg_value鐨勫

瀹㈡埛絝鎻愪氦璇鋒眰鐨勫洓縐嶆柟寮忥紵

瀹㈡埛絝璇鋒眰鏂伴〉闈㈠拰鎻愪氦鏁版嵁鐨勫洓縐嶆柟寮

瓚呴摼鎺 瓚呴摼鎺+js submit鎸夐挳鎻愪氦琛ㄥ崟 浣跨敤js鎻愪氦琛ㄥ崟

鎵撳紑鏂伴〉闈㈢殑鏂瑰紡

浣跨敤鐩稿硅礬寰勫拰緇濆硅礬寰

浣跨敤url鎼哄甫鍙傛暟

鎻愪氦鏁版嵁鐨勬柟寮忎負get鏂瑰紡

window.location

window.open;

鍏堥獙璇佸啀鎻愪氦琛ㄥ崟銆

浣跨敤hidden鎻愪氦鏁版嵁錛堥潪鐢ㄦ埛濉鍐欐暟鎹錛

浣跨敤button+js

浣跨敤a>+js

涓鑸涓簆ost鎻愪氦鏂瑰紡

1銆佽秴閾炬帴錛

鎵撳紑鏂伴〉闈錛歛target="_blank">;

浣跨敤url鎼哄甫鍙傛暟錛歛href="page2.jsp?uid=adminpass=123">

娉ㄦ剰錛氬氫釜鍙傛暟涔嬮棿浣跨敤榪炴帴錛屼嬌鐢?琛ㄧず鎼哄甫鍙傛暟錛

2銆佽秴閾炬帴+js錛

浣跨敤window.locationscripttype="text/javascript">

functionfun(){window.location="page2.jsp";}/script>

a閾炬帴鐨勫啓娉曪細ahref="javascript:fun();">閾炬帴鍒皃age2/a>href榪炴帴涓璋冪敤fun鍑芥暟銆

浣跨敤window.open()scripttype="text/javascript">

functionfun(){window.open("page2.jsp");--琛ㄧず鍦ㄦ柊紿楀彛鎵撳紑閾炬帴銆倉/script>

a閾炬帴涓錛歛href="javascript:fun();">閾炬帴鍒皃age2/a>

3銆佷嬌鐢╯ubmit鎸夐挳鎻愪氦鏁版嵁琛ㄥ崟錛氭敞鎰廰ction鍜宮ethod涓や釜灞炴ц〃紺虹殑鍚涔

瀵逛簬鐢ㄦ埛杈撳叆鏁版嵁錛歛銆侀渶瑕佹湁鐢ㄦ埛杈撳叆妗嗗嵆inputtype="text"name="username"/>鍦ㄦよ緭鍏ユ嗕腑杈撳叆鏁版嵁銆

b銆佹湁鏃墮渶瑕佸厛楠岃瘉錛屽啀鎻愪氦鏁版嵁錛

渚嬶細inputtype="text"name="uid"id="uid"/>functionfun4()

varuid=document.getElementById("uid").value;--鑾峰彇input杈撳叆妗嗙殑vaule鍊

if(uid==""){

alert("璇瘋緭鍏ョ敤鎴峰悕");

returnfalse;---琛ㄧず涓嶆彁浜ゆ暟鎹畗else{

returntrue;--鎻愪氦鏁版嵁}

submit鎻愪氦鎸夐挳inputtype="submit"value="鎻愪氦琛ㄥ崟"慰nclick="returnfun4();">

瀵逛簬闈炵敤鎴瘋緭鍏ユ暟鎹錛氫笉闇瑕乮nput杈撳叆妗

浣跨敤hidden鎻愪氦鏁版嵁錛

!--浣跨敤hidden鎻愪氦鏁版嵁->

formaction="page2.jsp"method="post">

inputtype="hidden"name="uid"id="uid2"value="admin">

inputtype="submit"value="鎻愪氦琛ㄥ崟">br/>

scripttype="text/javascript">

document.getElementById("uid2").value="admin2";--涓ょ嶅弬鏁板

/script>

/form>

4銆佷嬌鐢╦s鎻愪氦琛ㄥ崟錛

浣跨敤button+js鎻愪氦錛

button涓嶅叿澶囨彁浜ゅ姛鑳斤細

!--浣跨敤button鍜宩s鎻愪氦琛ㄥ崟-->

formaction="page2.jsp"method="post"id="form1">

inputtype="text"name="uid">

inputtype="button"value="鎻愪氦琛ㄥ崟"慰nclick='document.getElementById("form1").submit();'>---鑾峰彇鐨勬槸form鏍囩懼硅薄/form>

浣跨敤a>+js鎻愪氦琛ㄥ崟

!--浣跨敤a>鍜宩s鎻愪氦琛ㄥ崟>

formaction="page2.jsp"method="post"id="form2">

inputtype="text"name="uid">

ahref='javascript:document.getElementById("form2").submit();'>鎻愪氦琛ㄥ崟/a>br/>

/form>

js琛ㄥ崟鎬庝箞鍏佽稿嚱鏁幫紵

榪愮敤寮傛ユ濇兂promise瀹炵幇鎻愪氦涔嬪悗鍥炶皟,姣斿俛jax鐨剆uccess鍑芥暟灝辨槸鎻愪氦鎴愬姛鍚庣殑鍥炶皟

『叄』 誰有angularjs的好的視頻教程

IT營的那抄套angular5、angular4.x、anuglar2 Ant Desigin入門實戰視頻教程不錯,襲網盤鏈接地址分享給貼主 網頁鏈接

可以看看,個人覺得確實不錯,網盤地址失效的話可直接訪問網頁鏈接

『肆』 阿里雲分布式資料庫服務DRDS誰使用過 簡單講講!

淘寶開源的TDDL和cobar的結合,放到了阿里雲上就是DRDS,是商品,服務,可以購買使用的。可以在阿里雲官網上注冊免費試用。

=====================================================
隨著互聯網時代的到來,計算機要管理的數據量呈指數級別地飛速上漲,而我們卻完全無法對用戶數做出准確預估。我們的系統所需要支持的用戶數,很可能在短短的一個月內突然爆發式地增長幾千倍,數據也很可能快速地從原來的幾百GB飛速上漲到了幾百個TB。如果在這爆發的關鍵時刻,系統不穩定或無法訪問,那麼對於業務將會是毀滅性的打擊。
伴隨著這種對於系統性能、成本以及擴展性的新需要,以HBase、MongoDB為代表的NoSQL資料庫和以阿里DRDS、VoltDB、ScaleBase為代表的分布式NewSQL資料庫如雨後春筍般不斷涌現出來。
本文將會介紹阿里DRDS的技術理念、發展歷程、技術特性等內容。
DRDS設計理念
從20世紀70年代關系資料庫創立開始,其實大家在資料庫上的追求就從未發生過變化:更快的存取數據,可以按需擴縮以承載更大的訪問量和更大的數據量,開發容易,硬體成本低,我們可以把這叫做資料庫領域的聖杯。
為了支撐更大的訪問量和數據量,我們必然需要分布式資料庫系統,然而分布式系統又必然會面對強一致性所帶來的延遲提高的問題,因為網路通信本身比單機內通信代價高很多,這種通信的代價就會直接增加系統單次提交的延遲。延遲提高會導致資料庫鎖持有時間變長,使得高沖突條件下分布式事務的性能不升反降(這個具體可以了解一下Amdahl定律),甚至性能距離單機資料庫都還有明顯的差距。
從上面的說明,我們可以發現,問題的關鍵並不是分布式事務做不出來,而是做出來了卻因為性能太差而沒有什麼卵用。資料庫領域的高手們努力了40年,但至今仍然沒有人能夠很好地解決這個問題,Google Spanner的開發負責人就經常在他的Blog上談論延遲的問題,相信也是飽受這個問題的困擾。
面對這個難題,傳統的關系資料庫選擇了放棄分布式的方案,因為在20世紀70~80年代,我們的資料庫主要被用來處理企業內的各類數據,面對的用戶不過幾千人,而數據量最多也就是TB級別。用單台機器來處理事務,用個磁碟陣列處理一下磁碟容量不夠的問題,基本上就能解決一切問題了。
然而,信息化和互聯網的浪潮改變了這一切,我們突然發現,我們服務的對象發生了根本性變化,從原來的幾千人,變成了現在的幾億人,數據量也從TB級別到了PB級別甚至更多。存在單點的單機系統無論如何努力,都會面對系統處理能力的天花板。原來的這條路,看起來是走不下去了,我們必須想辦法換一條路來走。
可是,分布式資料庫所面對的強一致性難題卻像一座高山,人們努力了無數個日日夜夜,但能翻越這座山的日子看來仍然遙遙無期。
於是,有一群人認為,強一致性這件事看來不怎麼靠譜,那徹底繞開這個問題是不是個更好的選擇?他們發現確實有那麼一些場景是不需要強一致事務的,甚至連SQL都可以不要,最典型的就是日誌流水的記錄與分析這類場景。而去掉了事務和SQL,介面簡單了,性能就更容易得到提升,擴展性也更容易實現,這就是NoSQL系統的起源。
雖然NoSQL解決了性能和擴展性問題,但這種繞開問題的方法給用戶帶來了很多困擾,系統的開發成本也大大提升。這時候就有另外一群人,他們覺得用戶需要SQL,覺得用戶也需要事務,問題的關鍵在於我們要努力地往聖杯的方向不斷前進。在保持系統的擴展性和性能的前提下,付出盡可能小的代價來滿足業務對資料庫的需要。這就是NewSQL這個理念的由來。
DRDS也是一個NewSQL的系統,它與ScaleBase、VoltDB等系統類似,都希望能夠找到一條既能保持系統的高擴展性和高性能,又能盡可能保持傳統資料庫的ACID事務和SQL特性的分布式資料庫系統。
DRDS發展歷程
在一開始,TDDL的主要功能就是做資料庫切分,一個或一組SQL請求提交到TDDL,TDDL進行規則運算後得知SQL應該被分發到哪個機器,直接將SQL轉發到對應機器即可(如圖1)。

圖1 TDDL資料庫切分
開始的時候,這種簡單的路由策略能夠滿足用戶的需要,我們開始的那些應用,就是通過這樣非常簡單的方式完成了他所有的應用請求。我們也認為,這種方案簡單可靠,已經足夠好用了。
然而,當我們服務的應用從十幾個增長到幾百個的時候,大量的中小應用加入,大家紛紛表示,原來的方案限制太大,很多應用其實只是希望做個讀寫分離,希望能有更好的SQL兼容性。
於是,我們做了第一次重大升級,在這次升級里,我們提出了一個重要的概念就是三層架構,Matrix對應資料庫切分場景,對SQL有一定限制,Group對應讀寫分離和高可用場景,對SQL幾乎沒有限制。如圖2所示。

圖2 資料庫升級為三層架構
這種做法立刻得到了大家的認可,TDDL所提供的讀寫分離、分庫分表等核心功能,也成為了阿里集團內資料庫領域的標配組件,在阿里的幾乎所有應用上都有應用。最為難得的是,這些功能從上線後,到現在已經經歷了多年雙11的嚴酷考驗,從未出現過嚴重故障(p0、p1級別故障屬於嚴重故障)。資料庫體系作為整個應用系統的重中之重,能做到這件事,真是非常不容易。
隨著核心功能的穩定,自2010年開始,我們集中全部精力開始關注TDDL後端運維系統的完善與改進性工作。在DBA團隊的給力配合下,圍繞著TDDL,我們成功做到了在線數據動態擴縮、非同步索引等關鍵特徵,同時也比較成功地構建了一整套分布式資料庫服務管控體系,用戶基本上可以完全自助地完成整套資料庫環境的搭建與初始化工作。
大概是2012年,我們在阿里雲團隊的支持下,開始嘗試將TDDL這套體系輸出到阿里雲上,也有了個新的名字:阿里分布式資料庫服務(DRDS),希望能夠用我們的技術服務好更多的人。
不過當我們滿懷自信地把自己的軟體拿到雲上的時候,卻發現我們的軟體距離用戶的要求差距很大。在內部因為有DBA的同學們幫助進行SQL review,所以SQL的復雜度都是可控的。然而到了雲上,看了各種渠道提過來的兼容性需求,我們經常是不自覺地發出這樣的感嘆:「啊?原來這種語法MySQL也是可以支持的?」
於是,我們又進行了架構升級,這次是以兼容性為核心目標的系統升級工作,希望能夠在分布式場景下支持各類復雜的SQL,同時也將阿里這么多年來在分布式事務上的積累都帶到了DRDS裡面。
這次架構升級,我們的投入史無前例,用了三年多才將整個系統落地完成。我們先在內部以我們自己的業務作為首批用戶上線,經過了內部幾百個應用的嚴酷考驗以後,我們才敢拿到雲上,給到我們的最終用戶使用。
目前,我們正在將TDDL中更多的積累輸出到雲上,同時也努力優化我們的用戶界面。PS:其實用戶界面優化對我們這種專注於高性能後端技術的團隊來說,才是最大的技術挑戰,連我也去學了AngularJS,參與了用戶UI編。
DRDS主要功能介紹
發展歷史看完了,下面就由我來介紹一下目前我們已經輸出到雲上的主要功能。
【分布式SQL執行引擎】
分布式SQL引擎主要的目的,就是實現與單機資料庫SQL引擎的完全兼容。目前我們的SQL引擎能夠做到與MySQL的SQL引擎全兼容,包括各類join和各類復雜函數等。他主要包含SQL解析、優化、執行和合並四個流程,如圖3中綠色部分。

圖3 SQL引擎實現的主要流程
雖然SQL是兼容的,但是分布式SQL執行演算法與單機SQL的執行演算法卻完全不同,原因也很簡單,網路通信的延遲比單機內通信的延遲大得多。舉個例子說明一下,我們有份文件要從一張紙A上謄寫到另外一張紙B上,單機系統就好比兩張紙都在同一個辦公室里,而分布式資料庫則就像是一張紙在北京,一張紙在杭州。
自然地,如果兩張紙在同一個辦公室,因為傳輸距離近,逐行謄寫的效率是可以接受的。而如果距離是北京到杭州,用逐行謄寫的方式,就立刻顯得代價太高了,我們總不能看一行,就打個「飛的」去杭州寫下來吧。在這種情況下,還是把紙A上的信息拍個照片,【一整批的】帶到杭州去處理,明顯更簡單一些。這就是分布式資料庫特別強調吞吐調優的原因,只要是涉及到跨機的所有查詢,都必須盡可能的積攢一批後一起發送,以減少系統延遲提高帶來的不良影響。
【按需資料庫集群平滑擴縮】
DRDS允許應用按需將新的單機存儲加入或移出集群,DRDS則能夠保證應用在遷移流程中實現不停機擴容縮容。

圖4 DRDS按需進行平滑擴縮
在內部的資料庫使用實踐中,這個功能的一個最重要應用場景就是雙11了。在雙11之前,我們會將大批的機器加入到我們的資料庫集群中,抗過了雙11,這批機器就會下線。
當DRDS來到雲上,我們發現雙11其實不僅僅隻影響阿里內部的系統。在下游的各類電商輔助性系統其實也面對巨大壓力。在雙11前5天,網聚寶的熊總就找到我說,擔心撐不過雙11的流量,怕系統掛。於是我們就給他介紹了這個自動擴容的功能怎麼用,他買了一個月的資料庫,掛接在DRDS上。資料庫能力立刻翻倍,輕松抗過了雙11,也算是我印象比較深刻的一個案例了。
因為我們完全無法預測在什麼時間點系統會有爆發性的增長,而如果在這時候系統因為技術原因不能使用,就會給整個業務帶來毀滅性的影響,風口一旦錯過,就追悔莫及了。我想這就是雲計算特別強調可擴展能力的原因吧。
【小表廣播】
小表廣播也是我們在分布式資料庫領域內最常用的工具之一,他的核心目的其實都是一個——盡可能讓查詢只發生在單機。
讓我們用一個例子來說明,小表廣播的一般使用場景。

圖5 小表廣播場景
圖5中,如果我想知道買家id等於0的用戶在商城裡面買了哪些商品,我們一般會先將這兩個表join起來,然後再用where平台名=」商城」 and buyerID = 0找到符合要求的數據。然而這種join的方式,會導致大量的針對左表的網路I/O。如果要取出的數據量比較大,系統延遲會明顯上升。
這時候,為了提升性能,我們就必須要減少跨機join的網路代價。我們比較推薦應用做如下處理,將左表復制到右表的每一個庫上。這樣,join操作就由分布式join一下變回到本地join,系統的性能就有很大的提升了,如圖6所示。

圖6
【分布式事務套件】
在阿里巴巴的業務體系中存在非常多需要事務類的場景,下單減庫存,賬務,都是事務場景最集中的部分。
而我們處理事務的方法卻和傳統應用處理事務的方案不大一樣,我們非常強調事務的最終一致性和非同步化。利用這種方式,能夠極大地降低分布式系統中鎖持有的時間,從而極大地提升系統性能。

圖7 DRDS分布式事務解決套件
這種處理機制,是我們分布式事務能夠以極低成本大量運行的最核心法門。在DRDS平台內,我們將這些方案產品化,為了DRDS的分布式事務解決套件。
利用他們,能夠讓你以比較低的成本,實現低延遲,高吞吐的分布式事務場景。
DRDS的未來
阿里分布式資料庫服務DRDS上線至今,大家對這款產品的熱情超出了我們的預期,短短半年內已經有幾千個申請。
盡管還在公測期,但是大家就已經把關繫到身家性命的寶貴在線數據業務放到了DRDS上,我能夠感受到這份沉甸甸的信賴,也不想辜負這份信賴。
經過阿里內部幾千個應用的不斷歷練,DRDS已經積累出一套強大的分布式SQL執行引擎和和一整套分布式事務套件。
我也相信,這些積累能夠讓用戶在基本保持單機資料庫的使用習慣的前提下,享受到分布式資料庫高性能可擴展的好處。
在平時的DRDS支持過程中,我面對最多的問題就是,DRDS能不能夠在不改變任何原有業務邏輯和代碼的前提下,實現可自由伸縮和擴展呢?十分可惜的是,關系資料庫發展至今,還沒有找到既能保留傳統資料庫一切特性,又能實現高性能可擴展資料庫的方法。
然而,雖不能至,吾心嚮往之!我們會以「可擴展,高性能」為產品核心,堅定地走在追尋聖杯的路上,並堅信最終我們一定能夠找尋到它神聖的所在。
作者簡介:王晶昱,花名沈詢,阿里巴巴資深技術專家。目前主要負責阿里的分布式資料庫DRDS(TDDL)和阿里的分布式消息服務ONS(RocketMQ/Notify)兩個系統。

『伍』 angularjs復選框怎麼用

復選框

在表單里,復選框非常普遍。下面我們將看看Angular是怎樣使用ngModel實現數據綁定的。如果有許多復選框,那麼有時在把它綁定到對象的時候如何進行數據處理會讓人不知所措。

在我們創建的formData對象的內部,我們還創建了另一個對象。我們把它稱為favoriteColors,它請求用戶選擇最喜歡的顏色:

當用戶點擊上面復選框中的任意一個時,他們立刻看到formData對象發生了變更。我們把復選框的值存儲到fromData.favoriteColors對象里。這樣我們就把復選框的值傳遞給了伺服器了。

閱讀全文

與angularjs復選框相關的資料

熱點內容
哪裡買港版iphone6s 瀏覽:830
如何配置文件伺服器 瀏覽:532
5800計算程序 瀏覽:450
qq上銀行卡怎麼注銷 瀏覽:537
小米手機CSV文件轉EXCEL 瀏覽:668
易方達app怎麼解綁銀行卡 瀏覽:931
維度app是哪個國家的 瀏覽:476
阿瓦隆之王快速升級 瀏覽:279
qq會員10元升級超級會員 瀏覽:808
taptap部分iOS聯網教程 瀏覽:563
北京電競數據分析哪個好 瀏覽:397
夢幻西遊手游版本大全 瀏覽:285
文件保險櫃什麼意思 瀏覽:956
javastring轉換成data 瀏覽:817
iphone5se是不是翻新機 瀏覽:367
如何製作磁碟啟動引導文件 瀏覽:979
lsx文件如何轉換成pdf文件 瀏覽:745
金蝶kis標准版升級 瀏覽:560
用拼音編程有什麼用 瀏覽:25
ps什麼文件都打不開嗎 瀏覽:74

友情鏈接