特斯拉更新軟體 不再擔心電動車電量問題

特斯拉(Tesla)執行長 Elon Musk 日前才剛透過 Twitter 宣稱,他要終結特斯拉電動車主的「里程焦慮」(range anxiety,就是車主擔心電動車上路後會面臨電量不夠的問題),這顯然不是說說而已。特斯拉 19 日發布了 Model S 電動轎車軟體更新「Version 6.2」,Musk 更誇下海口,宣稱本次更新可讓 Model S 車主不需擔心電量問題!   Musk 19 日在對記者召開的電話會議上表示,Version 6.2 多了「里程保險」(range assurance)的程式,這項程式能夠與特斯拉的超級充電站溝通,在汽車快要沒電之際對車主示警,然後找到最近的充電站。   Version 6.2 另一個重要更新則是「旅程規劃」程式,可將超級充電站、Model S 與導航系統的網絡全面整合,為車主設計出最佳的長途旅行路線。也就是說,Model S 的系統會隨時確認目前的地理位置、最接近的超級充電站、電池所剩電量以及距離目的地還有多遠。Version 6.2 預計 2 週內就能正式釋出。    

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

這些新能源汽車 保證你一見到就心動!

人類在能源探索的道路上從未止步,不論是迫于傳統能源殆盡的危機,還是脫困於大氣污染迫切要求,新一輪的能源挑戰已經開始。這是一場腦洞大開的遊戲,無論是專業的汽車廠家還是奇思妙想的技術達人都紛紛接招,用或精於科技或詼諧幽默的方式,帶給我們一場奇幻的新能源之旅。  
1 、雪佛蘭EN-V    

通用日前發佈了一款名為雪佛蘭EN-V或者Electric Networked-Vehicle)的新電動概念車。這款概念車配備了兩個座椅,能在尖端衛星導航和感測器系統的説明下自主駕駛。該車配備了一個全電動的鋰離子動力傳動系統,能提供大約40公里的最大續航里程。此外,這款概念車還採用了未來感十足的車身設計和溫度控制系統。而一系列感測器和GPS驅動技術,使得這款EN-V能夠自主駕駛。  
2、標緻Shoo

  標緻Shoo是最具未來派色彩的太陽能概念車之一,其最大特色就是三角形外形設計和為發動機提供能量的太陽能電池板車頂。車頂上配置了太陽能面板將太陽能轉化成為電能,進而驅動該車的電動馬達行駛。依靠綠色能源行駛,綠色環保。而三角形設計,又相對穩定,同樣也讓該車擁有更多充裕的內部空間。   
3、日產Pivo

  日產汽車展出電動車Pivo。這款概念車以鋰電池驅動,座艙能360度旋轉,可適應駕駛人的全方位需求。Pivo最特別的地方是車廂可做180度旋轉,當你駕駛Pivo時,從此不用再倒車入庫,只要將車頭做180度旋轉,即可正向開車入庫。同時,Pivo的車廂和車架可以分離。   
4、AntroSolo

  匈牙利人研製的Antro Solo利用太陽能與汽電混合動力,燃燒每加侖(約合3.8升)汽油可行駛150英里(約合241公里),可謂一個驚人數字。天氣狀況良好時,車頂上的太陽能電池板提供的能量足以讓AntroSolo行駛15至25公里。當碰到多雲天氣,Antro Solo會預設使用一小型電動引擎或者由所搭載的乘客踩下腳踏開關。   
5、科尼賽克Quant

  位於瑞典的超級跑車製造商已研製出一款名為「Quant」的混合動力概念車——將太陽能和黃鐵礦(又名「愚人金」)這兩種最不可能「捆綁」在一起的能源加以混合。科尼賽克發言人表示,Quant的行駛距離可達到300英里(約合482公里),完全充電時間只有20分鐘。   
6、Jetcar

德國東部Neuruppin,電動汽車Jetcar設計者開著這輛電動汽車。這輛車子是電池提供動力,時速可達到160公里。  
7、Nissan終極智能燒烤車

  最後一款是吃貨的福音啦!所有人都愛燒烤,但清理現場又十分麻煩。現在問題解決了,Nissan推出了一款全新終極智慧燒烤車。這台車採用純電力驅動設計。為滿足燒烤需求,該車特別搭配了一台1500瓦的車載電源。車頂上的「人工蚊帳」系統可發射出半徑超聲波和防蟲香熏,能避免燒烤時蚊蟲干擾。    同時,這台終極智慧燒烤車還配有一台電視顯示幕,使用者可自行連接智慧手機看視頻或K歌。最為重要的是——當燒烤結束後,汽車內部自帶的垃圾處理箱和車載迷你接收器可以協助車主清理垃圾。   文/聰捕頭   文章來源:自媒體「排氣管」

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

增長率為76% 全球電動車市場達74萬輛車

德國Baden-Württemberg省的太陽能和氫能研究中心(ZSW)日前發佈的一份報告透露,全球電動汽車市場目前已達74萬輛車,其中幾乎有一半(32萬)註冊於2014年。基於電動車約為76%的增長率,去年汽車電池供應商的收益為20億歐元。   其中,美國市場增長69%,本土道路上的電動汽車數量增至29萬輛,占全球的三分之一。而中國是世界上第三最強大的電動車市場,2014年增加了約5萬4千輛,增長了120%,全國道路上接近有10萬輛電動車,僅次於擁有11萬電動車(2014年45%的速度增長)的日本。   該德國中心發現,這三個主要國家的扶持政策説明加速電動汽車的採用。在中國,例如,國產電動車是被補貼的,對終端消費者來講比較便宜。而德國相反,沒有市場激勵機制,從而只有11700新車註冊。   此外,該報告還發現,日產的Leaf是最流行的電動車品牌,創下了自2010年以來15萬的全球註冊記錄。第二是通用汽車公司的雪佛蘭Volt,全球註冊75000輛,第三為6萬註冊量的豐田Prius。而特斯拉S型已售出5萬輛,遙遙領先15000輛的寶馬的i3,事實上,i3才在市場上超過12個月,因此在這麼短時間內已具有這樣的市場份額,是令人印象深刻的。   2012年和2014年之間新車註冊數量每年增加兩倍。“如果近幾年的勢頭依然不減,在短短幾個月的時間裡,全球電動車的數量將超過百萬。”ZSW電化學能源技術事業部主任Werner Tillmetz表示。 

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

為主攻電動車 捷豹路虎將擴建英國研發中心以推新款

據英國汽車雜誌autocar3月25日消息,捷豹路虎計畫加大超低排放技術的研發,將其位於英國考文垂Whitley的研發中心由現有面積55英畝投資擴建一倍至110英畝,為其純電動汽車的問世鋪路。Whitley研發中心是捷豹、路虎兩個品牌先進動力工程低級、捷豹設計部門及公司的全球總部所在地。   其首批車型預計將會是捷豹XE豪華轎車純電動版,以及F=Pace跨界車的電動版,後者續航里程約300英里。此外,路虎推出電動SUV的可能性也很大,預計將採用與捷豹汽車相同的技術。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

使用Apache Hudi構建大規模、事務性數據湖

一個近期由Hudi PMC & Uber Senior Engineering Manager Nishith Agarwal分享的Talk

關於Nishith Agarwal更詳細的介紹,主要從事數據方面的工作,包括攝取標準化,數據湖原語等。

什麼是數據湖?數據湖是一個集中式的存儲,允許以任意規模存儲結構化和非結構化數據。你可以存儲原始數據,而不需要先轉化為結構化的數據,基於數據湖之上可以運行多種類型的分析,如dashboard、大數據處理的可視化、實時分析、機器學習等。

接着看看對於構建PB級數據湖有哪些關鍵的要求

第一個要求:增量攝取(CDC)

企業中高價值的數據往往存儲在OLTP中,例如下圖中,users表包含用戶ID,國家/地區,修改時間和其他詳細信息,但OLTP系統並未針對大批量分析進行優化,因此可能需要引入數據湖。同時一些企業採用備份在線數據庫的方式,並將其存儲到數據湖中的方法來攝取數據,但這種方式無法擴展,同時它給上游數據庫增加了沉重的負擔,也導致數據重寫的浪費,因此需要一種增量攝取數據的方法。

第二個要求:Log Event去重

考慮分析大規模時間序列數據的場景,這些事件被寫入數據管道,並且數量非常大,可達數十億,每秒可達百萬的量。但流中可能有重複項,可能是由於至少一次(atleast-once)保證,數據管道或客戶端失敗重試處理等發送了重複的事件,如果不對日誌流進行重複處理,則對這些數據集進行的分析會有正確性問題。下圖是一個示例日誌事件流,其中事件ID為唯一鍵,帶有事件時間和其他有效負載。

第三個要求:存儲管理(自動管理DFS上文件)

我們已經了解了如何攝取數據,那麼如何管理數據的存儲以擴展整個生態系統呢?其中小文件是個大問題,它們會導致查詢引擎的開銷並增加文件系統元數據的壓力。而如果寫入較大的文件,則可能導致攝取延遲增加。一種常見的策略是先攝取小文件,然後再進行合併,這種方法沒有標準,並且在某些情況下是非原子行為,會導致一致性問題。無論如何,當我們寫小文件並且在合併這些文件之前,查詢性能都會受到影響。

第四個要求:事務寫(ACID能力)

傳統數據湖在數據寫入時的事務性方面做得不太好,但隨着越來越多的業務關鍵處理流程移至數據湖,情況也在發生變化,我們需要一種機制來原子地發布一批數據,即僅保存有效數據,部分失敗必須回滾而不會損壞已有數據集。同時查詢的結果必須是可重複的,查詢端看不到任何部分提取的數據,任何提交的數據都必須可靠地寫入。Hudi提供了強大的ACID能力。

第五個要求:更快地派生/ETL數據(增量處理)

僅僅能快速攝取數據還不夠,我們還需要具有計算派生數據的能力,沒有這個能力,數據工程師通常會繞過原始表來構建其派生/ETL並最終破壞整個體繫結構。下面示例中,我們看到原始付款表(貨幣未標準化)和發生貨幣轉換的派生表。

擴展此類數據管道時很有挑戰,如僅對變更進行計算,或者基於窗口的Join的挑戰。對基礎數據集進行大規模重新處理不太可能,這會浪費計算資源。需要在數據湖上進行抽象以支持對上游表中已更改的行(數據)進行智能計算。

第六個要求:法律合規/數據刪除(更新&刪除)

近年來隨着新的數據保護法規生效,對數據保留有了嚴格的規定,需要刪除原始記錄,修複數據的正確性等,當需要在PB級數據湖中高效執行合規性時非常困難,如同大海撈針一般,需要高效的刪除,如進行索引,對掃描進行優化,將刪除記錄有效地傳播到下游表的機制。

要求回顧(匯總)

  • 支持增量數據庫變更日誌攝取。
  • 從日誌事件中刪除所有重複項。
  • Data Lake必須為其數據集提供有效的存儲管理
  • 支持事務寫入
  • 必須提供嚴格的SLA,以確保原始表和派生表的數據新鮮度
  • 任何數據合規性需求都需要得到有效的支持
  • 支持唯一鍵約束
  • 有效處理遲到的數據

有沒有能滿足上面所有需求的系統呢?接下來我們引入Apache Hudi,HUDI代表Hadoop Upserts Deletes and Incrementals。從高層次講,HUDI允許消費數據庫和kafa事件中的變更事件,也可以增量消費其他HUDI數據集中的變更事件,並將其提取到存儲在Hadoop兼容,如HDFS和雲存儲中。在讀取方面,它提供3種不同的視圖:增量視圖,快照視圖和實時視圖。

HUDI支持2種存儲格式:“寫時複製”和“讀時合併”。

首先來看看寫時複製。如下圖所示,HUDI管理了數據集,並嘗試將一批數據寫入數據湖,HUDI維護稱為“提交時間軸(commit timeline)”的內容,以跟蹤HUDI管理的數據集上發生的操作/更改,它在提交時間軸上標記了一個“inflight”文件,表示操作已開始,HUDI會寫2個parquet文件,然後將“inflight”文件標記為已完成,這從原子上使該新數據寫入HUDI管理的數據集中,並可用於查詢。正如我們提到的,RO視圖優化查詢性能,並提供parquet的基本原始列存性能,無需增加任何額外成本。
現在假設需要更新另一批數據,HUDI在提交時間軸上標記了一個“inflight”文件,並開始合併這些更新並重寫Parquet File1。此時,由於提交仍在進行中,因此用戶看不到正在寫入任何這些更新(這就是我們稱為“快照隔離”)。最終以原子方式發布提交后,就可以查詢版本為C2的新合併的parquet文件。

COW已經在Uber投入運行多年,大多數數據集都位於COW存儲類型上。

儘管COW服務於我們的大多數用例,但仍有一些因素值得我們關注。以Uber的行程表為例,可以想象這可能是一個很大的表,它在旅程的整個生命周期中獲取大量更新。每隔30分鐘,我們就會獲得一組新旅行以及對舊旅行的一些更新,在Hive上的旅行數據是按天劃分分區的,因此新旅行最終會在最新分區中寫入新文件,而某些更新會在舊分區中寫入文件。使用COW,我們只能重寫那些更新所涉及的文件,並且能夠高效地更新。由於COW最終會重寫某些文件,因此可以像合併和重寫該數據一樣快。在該用例中通常大於15分鐘。再來看另外一種情況,由於某些業務用例(例如GDPR),必須更新大量歷史行程,這些更新涉及過去幾個月數據,從而導致很高的寫入延遲,並一遍又一遍地重寫大量數據,寫放大也會導致大量的IO。若為工作負載分配的資源不足,可能就會嚴重損害攝取延遲。

在真實場景中,會將ETL鏈接在一起來構建數據管道,問題會變得更加複雜。

對問題進行總結如下:在COW中,太多的更新(尤其是雜亂的跨分區/文件)會嚴重影響提取延遲(由於作業運行時間較長且無法追趕上入流量),同時還會引起巨大的寫放大,從而影響HDFS(相同文件的48個版本+過多的IO)。合併更新和重寫parquet文件會限制我們的數據的新鮮度,因為完成此類工作需要時間 = (重寫parquet文件所花費的時間*parquet文件的數量)/(并行性)。

在COW中,我們實際上並沒有太大的parquet文件,因為即使只有一行更新也可能要重寫整個文件,因為Hudi會選擇寫入小於預期大小的文件。

MergeOnRead將所有這些更新分組到一個文件中,然後在稍後的時刻創建一個新版本。對於重更新的表,重寫大文件會導致開銷變大。

如何解決上述寫放大問題呢?除了將更新合併並重寫parquet文件之外,我們將更新寫入增量文件中,這可以幫助我們降低攝取延遲並獲得更好的新鮮度。

將更新寫入增量文件將需要在讀取端做額外的工作以便能夠讀取增量文件中記錄,這意味着我們需要構建更智能,更智能的讀取端。

首先來看看寫時複製。如下圖所示,HUDI管理了數據集,並嘗試將一批數據寫入數據湖,HUDI維護稱為“提交時間軸(commit timeline)”的內容,以跟蹤HUDI管理的數據集上發生的操作/更改,它在提交時間軸上標記了一個“inflight”文件,表示操作已開始,HUDI會寫2個parquet文件,然後將“inflight”文件標記為已完成,這從原子上使該新數據寫入HUDI管理的數據集中,並可用於查詢。正如我們提到的,RO視圖優化查詢性能,並提供parquet的基本原始列存性能,無需增加任何額外成本。

現在需要進行第二次更新,與合併和重寫新的parquet文件(如在COW中一樣)不同,這些更新被寫到與基礎parquet文件對應的增量文件中。RO視圖繼續查詢parquet文件(過時的數據),而RealTime View(Snapshot query)會合併了parquet中的數據和增量文件中的更新,以提供最新數據的視圖。可以看到,MOR是在查詢執行時間與較低攝取延遲之間的一個權衡。

那麼,為什麼我們要異步運行壓縮?我們實現了MERGE_ON_READ來提高數據攝取速度,我們希望儘快攝取較新的數據。而合併更新和創建列式文件是Hudi數據攝取的主要耗時部分。

因此我們引入了異步Compaction步驟,該步驟可以與數據攝取同時運行,減少數據攝取延遲。

Hudi將事務引入到了大規模數據處理中,實際上,我們是最早這樣做的系統之一,最近,它已通過其他項目的類似方法獲得了社區認可。

Hudi支持多行多分區的原子性提交,Hudi維護一個特殊的文件夾.hoodie,在該文件夾中記錄以單調遞增的時間戳表示的操作,Hudi使用此文件夾以原子方式公開已提交的操作;發生的部分故障會透明地回滾,並且不會影響讀者和後面的寫入;Hudi使用MVCC模型將讀取與併發攝取和壓縮隔離開來;Hudi提交協議和DFS存儲保證了數據的持久寫入。

下面介紹Hudi在Uber的使用情況

Hudi管理了超過150PB數據湖,超過10000張表,每天攝入5000億條記錄。

接着看看Hudi如何替代分析架構。利用Hudi的upsert原語,可以在攝取到數據湖中時實現<5分鐘的新鮮度,並且能繼續獲得列式數據的原始性能(parquet格式),同時使用Hudi還可以獲得實時視圖,以5-10分鐘的延遲提供dashboard,此外HUDI支持的增量視圖有助於長尾效應對數據集的突變。

為方便用戶能快速使用Hudi,Hudi提供了一些開箱即用的工具,如HoodieDeltaStreamer,在Uber內部,HoodieDeltaStreamer用來對全球網絡進行近實時分析,可用來消費DFS/Kafka中的數據。

除了DeltaStreamer,Hudi還集成了Spark Datasource,也提供了開箱即用的能力,基於Spark,可以快速構建ETL管道,同時也可無縫使用Hudi + PySpark。

接着介紹更高級的原語和特性。

如何從損壞的數據中恢復?例如線上由於bug導致寫入了不正確的數據,或者上游系統將某一列的值標記為null,Hudi也可以很好的處理上述場景,可以將表恢復到最近的一次正確時間,如Hudi提供的savepoint就可以將不同的commit保存起來,用於後續恢復,注意MoR表暫時不支持savepoint;Hudi還提供了文件的版本號,即可以保存多個版本的文件,這對於CoW和MoR表都適用,但是會佔用一些存儲空間。

Hudi還提供便於增量ETL的高級特性,通過Spark/Spark便可以輕鬆增量拉取Hudi表的變更。

除了增量拉取,Hudi也提供了時間旅行特性,同樣通過Spark/Hive便可以輕鬆查詢指定版本的數據,其中對於Hive查詢中指定hoodie.table_name.consume.end.timestamp也馬上會得到支持。

下面看看對於線上的Hudi Spark作業如何調優。

下面列舉了幾個調優手段,設置Kryo序列化器,使用Shuffle Service,利用開源的profiler來進行內存調優,當然Hudi也提供了Hudi生產環境的調優配置,可參考【調優 | Apache Hudi應用調優指南】

下面介紹社區正在進行的工作,敬請期待。

即將發布的0.6.0版本,將企業中存量的parquet表高效導入Hudi中,與傳統通過Spark讀取Parquet表然後再寫入Hudi方案相比,佔用的資源和耗時都將大幅降低。以及對於查詢計劃的O(1)時間複雜度的處理,新增列索引及統一元數據管理以消除對DFS的文件list操作。

還有一些值得關注的特性,比如支持行級別的索引,該功能將極大降低upsert的延遲;異步數據clustering以優化存儲和查詢性能;支持Presto對MoR表的快照查詢;Hudi集成Flink,通過Flink可將數據寫入Hudi數據湖。

整個分享就介紹到這裏,歡迎觀看。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

索引使用的基本原則

  我們在建表的時候最好創建自增主鍵,這樣非主鍵索引佔用的空間就比較小。這種方式插入數據都是追加數據,不涉及到數據頁分裂。但也不是所有場景下都需要自增主鍵,比如有些業務場景的需求是只有一個索引並且該索引必須是唯一索引,由於沒有其他索引,就不用考慮輔助索引的存儲空間消耗,可以直接將這個索引設為主鍵。

覆蓋索引

  比如ID、k是表T中的主鍵索引和輔助索引,現在有一條查詢需求:

select ID from T where k between 3 and 5;

  因為k索引樹中恭弘=叶 恭弘子結點值存放的就是ID值,可以直接查詢到結果,這時就不需要再回表。如果查詢的結果是聯合索引的字段,同樣不需要回表操作。索引k覆蓋了我們的查詢需求,這種索引就叫覆蓋索引。由於覆蓋索引可以減少搜索索引樹的次數,因此這是一個常用的數據庫性能優化方法。

聯合索引

  簡要的說就是由多個字段組成的索引,假設現在有張市民信息表T:

CREATE TABLE `tuser` (
  `id` int(11) NOT NULL,
  `id_card` varchar(32) DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `ismale` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_card` (`id_card`),
  KEY `name_age` (`name`,`age`)
) ENGINE=I

  裏面有身份證號 id_card、姓名 name等字段,有個高頻請求:根據身份證號查詢姓名,那麼我們就可以創建 (id_card, name) 聯合索引,這裡會用到覆蓋索引,不再需要回表查詢整行記錄。索引的維護是有代價的,怎樣建立聯合索引需要考慮具體的業務場景。

最左前綴原則

  有時候我們會遇到不常見的查詢請求,比如根據身份證號查詢市民的家庭住址。如果我們走全表掃描效率太低,單獨創建一個索引又浪費空間,這會就可以用B+樹索引的最左前綴原則。用聯合索引 (name, age) 來說明這個概念:

        

  比如需求是查詢所有名字是張三的人,可以快速定位到 ID4,然後向後掃描所有滿足條件的數據。如果查詢姓張的人,sql里條件部分可以這樣寫 “ where name like ‘張%’ ”,同樣也能用到上面的聯合索引。這裏最左前綴可以是聯合索引的最左N個字段,也可以是字符串索引的最左M個字符。

  那我們該如何建立聯合索引呢?首先要遵循一個原則:如果通過調整索引順序,可以少維護一個索引,那麼這個順序就是優先考慮的。比如上面的(id_card,name)索引,根據 id_card 查詢家庭住址就不要再建立 聯合索引了。

如果既有聯合查詢,又有基於a、b各自的查詢,比如查詢語句中只有索引b是不能用聯合索引 (a,b)的。那麼就要建立兩個索引,考慮的原則是索引佔用空間。比如市民信息表中 name 字段比 age 佔用空間大,就創建一個 (name, age)聯合索引和一個 (age)的單字段索引。

  對於聯合索引,還有一個問題:字段中不符合最左前綴的部分會怎麼樣?同樣用上面的 (name, age) 索引來說明,現在有一個需求:“查詢出名字第一個字是張,年齡為10歲的男孩”。sql是這樣的:

select * from T where name like '張%' and age = 10 and ismale = 1;

在MySQL5.6之前,只能不停的回表查到最後的結果;5.6之後引入了索引下推優化,就是在索引遍歷過程中,對索引中包含的字段中先做判斷,過濾掉不滿足條件的記錄,減少回表的次數。用兩個圖來解釋:分別是優化前後

可以看到原來是4次回表,優化后變成2次,減少了對資源的訪問。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

寫給.NET開發者的Python教程(一):引言

距離上一篇博文已過去8個月了,這段時間發生了很多事情導致沒能持續更新博客。這段時間除了工作繁忙,業餘時間都投入到AI技術的學習中,後面一段時間將會給大家分享我作為一個.NET開發人員在深度學習領域學習的收穫和成果。

《寫給.NET開發者的Python教程》這個系列是第一個想和大家分享的內容,主要是從C#角度學習Python,希望能給.NET開發者們掃清AI學習的第一個攔路虎。所有的教程都會以AI開發的必備的Jupyter Notebook環境編寫和提供給大家。

之後的系列會給大家分享如何從頭開始使用深度學習框架訓練AI模型和打比賽的做法和經驗。

為什麼學Python?

 

學習Python不是鼓勵大家拋棄.NET平台轉向Python,而是為了讓大家能夠在這個AI當紅的年代,能對新的技術領域有所了解,甚至多掌握一門手藝。於我而言,學習Python的理由有幾個:

  1. 學習AI技術。雖然AI領域能夠使用很多語言和平台(如R語言、ML.NET),但目前最主流的方式是使用基於Python的AI框架,例如PyTorch和Tensorflow。大多數AI庫和開源項目都基於Python,業界開發和部署AI模型也大都使用Python。
  2. 擁抱新語言。學一門新語言可以開拓視野,增加解決問題的靈活性。有個朋友每年都會學習一門新語言,這一點非常棒。學習新東西可以保持對技術的熱情和新鮮感,不同的語言和平台各有千秋,擅長不同領域,能夠成為一個多面手對我們的職業發展大有裨益。
  3. 提升競爭力。對於.NET開發者而言,我們會越來越多遇見項目中集成AI技術的場景,學會Python有助於我們了解AI技術方案,更好的參与AI方案的開發、集成和部署。舉個例子,目前主流的AI服務託管方案都是將AI模型部署為Web服務,然而Python的諸多Web框架性能和併發能力都不如ASP.NET Core,如果能採用ASP.NET Core作為Web服務,本機通過ML.NET或TensorFlow.NET調用AI模型或許會是更好的選擇。

根據StackOverflow 2020年的開發者報告,Python仍舊是近幾年開發者最想學習的語言:https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-wanted

 

 

系列內容規劃

《寫給.NET開發者的Python教程》主要會以C#和Python語言特性對照的方式,為大家介紹Python的語法,每一行Python代碼都會有C#的對照例子。同時對於Python的類庫和框架的使用,也會提供.NET對照的介紹,為大家提供一份簡明概要的指引教程。

《寫給.NET開發者的Python教程》系列博文的規劃如下:

  1. 引言
  2. C# vs Python:語言特性、Conda和Jupyter Notebook環境
  3. 基本類型和變量
  4. 運算符、條件判斷和循環語句
  5. 數據結構
  6. 函數和面向對象
  7. 模塊、包和庫
  8. 常用功能:文件、時間、字符串、Json&XML序列化和反序列化
  9. 機器學習神器:Numpy、Pandas、Pillow和Matplotlib

最後,這個系列的更新頻率暫定一周一節

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

Mariadb之事務隔離級別

  上一篇我們聊到了mariadb的鎖,以及怎麼手動加鎖和解鎖等等,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13196905.html;今天我們來聊一聊mariadb的事務隔離級別;在前邊的隨筆中,我們提到到了mysql的存儲引擎,常用的有MyISAM和innodb,其中myisam不支持事務,innodb支持事務;所以我們常說的事務是針對innodb存儲引擎來說的;所謂事務就是在我們在執行大批量語句時,為了保證數據庫的完整性,要麼語句全部執行,要麼語句全部不執行;所以事務必須滿足ACID這是個條件;A表示Atomicity,原子性,也是不可分性;C表示Consistency,一致性;I表示Isolation,隔離性,又稱獨立性;D表示Durability,持久性;所謂原子性,就是事務中執行的語句要麼全部執行,要麼全部不執行,如果事務在中途發生錯誤,那麼前面執行過的語句將會回滾到事務前;一致性指的是在執行事務之前和事務執行完成后的數據庫狀態是完整的;也就是說我們執行的語句都按照我們預想的結果執行了;隔離性指數據庫允許多個併發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。持久性指的是,事務執行完成后,對數據的修改是永久的;

  接下來我們來說說怎麼在mariadb中開啟事務吧

  用戶手動開啟事務用start transaction 或者使用begin語句開啟事務;

  提示:以上紅框中的語句就表示手動開啟一個事務;這裏需要注意一點,對於mysql來講,默認在命令行執行的語句都是自動提交事務的;也就是說默認情況下我們在mysql shell中執行的語句它默認也會開啟一個事務,但我們語句執行完成后,它會自動把該事務提交;所以我們手動開啟一個事務可以使用start transaction 語句 或者begin 或者執行set autocommit=0來關閉自動提交事務;

  提示:提交事務用commit 語句,表示結束當前事務;當然結束當前事務也可以用rollback語句,表示回滾到事務之前的狀態;回滾以後事務也就結束了;

  SAVEPOINT identifier:創建一個保存點,一個事務中可以存在多個保存點,回滾時我們可以指定回滾到某個點上;

MariaDB [first_db]> begin;
Query OK, 0 rows affected (0.000 sec)

MariaDB [first_db]> select * from test_tb;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
+------+----------+------+
2 rows in set (0.001 sec)

MariaDB [first_db]> insert into test_tb values (3,"lisi",23);
Query OK, 1 row affected (0.002 sec)

MariaDB [first_db]> savepoint one;
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> insert into test_tb values (4,"wangwu",25);
Query OK, 1 row affected (0.001 sec)

MariaDB [first_db]> savepoint two;
Query OK, 0 rows affected (0.000 sec)

MariaDB [first_db]> select * from test_tb;                   
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
|    3 | lisi     |   23 |
|    4 | wangwu   |   25 |
+------+----------+------+
4 rows in set (0.001 sec)

MariaDB [first_db]> rollback to one;
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> select * from test_tb;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
|    3 | lisi     |   23 |
+------+----------+------+
3 rows in set (0.001 sec)

MariaDB [first_db]>

  提示:存在多個保存點,如果回滾到前邊的點以後,後面的保存點就沒有了;

  接下來看看事務的隔離級別

  對於mysql數據庫 innodb存儲引擎支持的事務隔離級別有4中,READ-UNCOMMITED:讀未提交;這表示事務還沒有結束,其他用戶或進程是可以實時的讀到事務中對數據的改變,因為事務還沒提交,所以我們認為其他用戶或進程讀到的數據就是一個不準確的數據,通常我們把這種叫臟讀;READ-COMMITTED:讀提交;這表示只有事務提交后,其他用戶或進程才可以讀到事務修改后的數據;這種事務隔離級別就要比前面的隔離級別要高一點,讀到的數據也要精準一點;這種隔離級別就是只要事務A提交了,在其他事務里就可以讀取到事務A修改后的數據;通常這種我們叫不可重複讀,不可重複讀表示在其他事務中,讀到的數據是根據事務A是否提交有關係;REPEATABLE-READ:可重複讀,這表示在A事務中修改后的數據,在B中事務上不可見的,即便A中事務已經提交,B中事務沒有提交,那麼在B中的事務中讀到的還是A事務修改前的數據;只有當事務B結束后才能讀到A事務修改后的數據;所以通常我們把這種方式也叫幻讀,給人一種幻覺的感覺;SERIALIZABLE:串行化;這種隔離級別是最高的,但同時併發訪問也是最差的,它表示事務A和事務B是順序執行的,什麼意思呢,就是說事務B必須要等到事務A完成后才可以執行;

  關閉自動提交功能

MariaDB [first_db]> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> set @@session.autocommit=0;
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> 

  提示:以上語句表示設定當前會話關閉自動提交功能,關閉此會話它將恢復原有設定;

  設置事務A的隔離級別為read-uncommitted

  提示:事務隔離級別字串要加引號,否則會提示語法錯誤

  設置會話B的隔離級別為read-uncommitted

  在事務A中修改表中數據,在會話B中查看錶中數據,看看是否在會話B中看到修改后的數據?

MariaDB [first_db]> BEGIN;
Query OK, 0 rows affected (0.000 sec)

MariaDB [first_db]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| REPEATABLE-READ        |
+------------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> set @@session.tx_isolation='read-uncommitted';
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> select @@session.tx_isolation;                
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-UNCOMMITTED       |
+------------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> select * from test_tb;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
+------+----------+------+
2 rows in set (0.001 sec)

MariaDB [first_db]> insert into test_tb values(2,"xiaohong",33);
Query OK, 1 row affected (0.001 sec)

MariaDB [first_db]> select * from test_tb;                      
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
|    2 | xiaohong |   33 |
+------+----------+------+
3 rows in set (0.001 sec)

MariaDB [first_db]> 

  提示:在事務A中插入數據在當前事務中是可以正常看到數據的變化;

  提示:可以看到在會話B上是可以正常看到事務A中數據的修改;

  提示:從上面的信息可以看到,當事務A中的修改操作回滾時,在會話B中是可以查看到回滾后的數據;這也意味這在會話B中讀到的數據不是很準確;

  設置事務A的事務隔離級別為read-committed

  設置會話B的事務隔離級別為read-committed,然後在事務A上修改數據,不提交,看看會話B上是否可以看到?

MariaDB [first_db]> start transaction;
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-UNCOMMITTED       |
+------------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> set @@session.tx_isolation='read-committed';
Query OK, 0 rows affected (0.001 sec)

MariaDB [first_db]> select @@session.tx_isolation;              
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.001 sec)

MariaDB [first_db]> select * from test_tb;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
+------+----------+------+
2 rows in set (0.001 sec)

MariaDB [first_db]> insert into test_tb values(3,"wangwu",43);  
Query OK, 1 row affected (0.001 sec)

MariaDB [first_db]> select * from test_tb;                    
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | xiaoming |   44 |
|    2 | zhangsan |   16 |
|    3 | wangwu   |   43 |
+------+----------+------+
3 rows in set (0.001 sec)

MariaDB [first_db]> 

  在會話B中查看test_tb表,看看是否有能看到修改后的數據?

  提示:在會話B中可以看到的test_tb表中的數據還是事務A開始前的數據;

  提交事務A,看看會話B是否能夠看到修改后的數據呢?

  提示:可以看到當事務A提交以後,在會話B中就可以看到事務A中修改后的數據;

  設置事務A的事務隔離級別為repeatable-read

MariaDB [first_db]> begin;
Query OK, 0 rows affected (0.000 sec)

MariaDB [first_db]> set @@session.tx_isolation='repeatable-read';
Query OK, 0 rows affected (0.000 sec)

MariaDB [first_db]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| REPEATABLE-READ        |
+------------------------+
1 row in set (0.000 sec)

MariaDB [first_db]> 

  關閉事務B的自動提交功能並設置事務B的隔離級別為repeatable-read 

  在事務A中修改數據,並提交,看看在事務B中是否能看到修改后的數據?

  在事務B中查看test_tb表中的數據,看看是否有變化呢?

  提示:可以看到在事務B中無論怎麼查看數據都是沒有發生變化;

  提交事務B在查看數據看看是否有變化?

  提示:可以看到當事務B提交以後,再次查看錶中數據,就可以看到事務A更改以後的表數據了;

  設置會話A的事務隔離級別為serializable

  設置會話B的事務隔離級別為serializable

  在事務A,事務B中更新表中同一條數據,看看會發生什麼?

  提示:在事務B中成功修改了第一條數據;

  提示:在事務A上就不能修改第一條數據了,那我們在事務A上是否可修改第二條數據呢?

  提示:可以看到第二條數據是能夠修改的;

  提交事務B,看看A事務上是否可以修改第一條數據呢?

  提示:提交了事務B以後,在會話B上再次查看test_tb表中的數據,發現執行不了,原因是事務A修改了第二條數據,還未完成事務,所以一直阻塞;

  在事務A上修改第一條數據,看看是否可修改?

  提示:提交了事務B以後,在事務A上還是不能夠修改第一條數據;原因是事務A修改了第二條數據,事務還沒有結束,所以第三個事務就無法執行,所以我們在會話B上是不能夠查看數據,因為默認情況查看數據也會啟動一個事務;

  結束事務A,在會話B上看看是否可查詢?

  提示:回滾了事務A,事務A也就結束了;在事務B中修改的數據,在事務A上做回滾,是回滾不回去的;這說明回滾操作只針對當前事務;

  提示:結束了事務A以後,在會話B上就可以正常查看test_tb上的數據了;

  以上就是在mariadb數據庫上的事務的四種隔離級別的區別;從上面的演示可以看到,串行化的隔離級別最高,但是併發連接也是最差的,因為它必須要等到前一個事務結束后才可以執行後面的事務;其次就是可重讀,可重讀必須是兩個事務都結束以後才可以看到真實修改后的數據;再其次就是不可重讀,讀提交,這種隔離級別必須是一方事務提交以後其他事務才可以讀到真實修改數據;而隔離級別最低就是對未提交,這種隔離級別只要是事務中修改了,其他事務上就能夠讀到相應的數據;當然這種讀到的數據也是最不靠譜的;

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

特斯拉歐洲首座工廠落腳柏林 業界關注

摘錄自2019年11月13日中央社報導

特斯拉執行長馬斯克(Elon Musk)12日在柏林接受全國最大報「畫報」(Bild)集團頒獎時意外宣布,歐洲第一座超級電池廠將落腳在柏林地區。

柏林在地的「每日鏡報」(Der Tagesspiegel)報導,知情人士指出,特斯拉超級電池廠(Gigafactory)的預定地在柏林東南郊的工業區,鄰近即將在明年秋天啟用的新機場,行政區屬布蘭登堡邦(Brandenburg)。這座廠的規模相當於特斯拉目前在上海興建的新廠,預計2021年年底完工啟用,可望創造7000個工作機會。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

120頭大象死於乾旱 辛巴威將遷移大批野生動物

摘錄自2019年11月12日中央社報導

辛巴威野生動物管理當局11日說,他們將遷移數百頭大象及其他野生動物,以避免牠們死於致命乾旱。過去2個月來,辛巴威歷經史上最嚴重旱災之一,目前至少有120頭大象死亡。

辛巴威國家公園暨野生動物管理局(Zimbabwe Parks and Wildlife Management Authority)發言人法拉沃(Tinashe Farawo)告訴法新社:「我們正遷移600頭大象、包括5至10頭獅子的兩個獅群、一群非洲獵犬、50頭水牛、40頭長頸鹿及2000頭黑斑羚。」

他指出,遷移作業將從「雨季展開,那時牧草和樹葉都已漸漸繁茂」。雨季通常自11月中旬開始。

數十頭大象日前在辛巴威西北部的萬基禁獵區(Hwange)死亡後,當局才宣布這個遷移行動。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準