台日合作電動車「日台之翼」 日本參賽奪佳績

  南臺科技大學與日本姊妹校三重大學跨國跨校合作,組團參加日本鈴鹿賽道所舉辦的「2015 Ene-1 GP SUZUKA」新世代能源車競賽,「日台之翼」以 25 分 03 秒636成績在全部 89 個參賽隊伍中勇奪第 10 名,在所有參賽的大專隊伍中則名列第 2,由於兩校聯合組隊,無法參加專科以上學校組別,因而歸屬一般組(社會組)中排名第 6,以第一年參賽隊伍而言,成績表現十分亮眼。   其競賽方式是以 40 顆市售 3 號電池為電源的電動車競速賽,行駛於鈴鹿賽車道 3 圈,並以總時間長短決定勝負。南臺科大校長戴謙表示,此次競賽用車「日台之翼」為日本三重大學電機系師生組裝車輛,南臺科大提供車輛測試與行駛數據分析,並由台灣大魯閣集團贊助車體與車輛零件,攜手合作完成。   有鑑於南臺科大機械系已有 20 年長期製作車輛如太陽能車、方程式賽車、燃料電池車、環保電車等技術與經驗,日本三重大學決定與南臺科大攜手合作,製作電動車共同參賽。     (圖片來源:)

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

福特新專利:電動車可分拆出單輪車騎行

傳統內燃機引擎汽車的引擎得透過傳動系統將動力傳到輪子,純電動車的馬達則往往直接連結在輪子上,如果把輪子連同馬達一起拆下來,是不是能當「風火輪」呢?你或許覺得這個想法超級異想天開,不過福特汽車卻剛申請通過一項這樣的專利。

這項專利名稱為「可與汽車結合的自力推進單輪車」,其實就是從電動車上拔下一個輪子來,使用方式是這樣的,當車主將電動車停妥後,下車來,在左後輪處放下一個腳架,之後就能拆下左後輪,馬達系統內附在輪框之中,將電力與資料傳輸數據纜線拆離電動車本體,從後車箱中取出把手椅座組,放在輪子上,接上電力與數據纜線,就成了一輛單輪車。

(Source:)   這輛單輪車顯然與賽格威等產品一樣會自動平衡,使用這種雙重交通工具,可以把車停在停車場後,騎著風火輪到汽車不便停靠的地方,似乎也還蠻方便,此外,由於電動車少了個輪子,歹徒就算成功開鎖偷車也開不走,大概是額外的好處。不過,反過來說,要是把風火輪給騎丟了,電動車成了三輪車,也是哪兒都去不了,這可就糗大了。   無論如何,這項專利還在紙面階段,就看福特會不會真的把它實現吧。

(首圖來源: CC BY 2.0)    (本文授權轉載自《》─〈〉)

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

大眾放棄向日本市場投放純電動汽車electric-up!

德國大眾決定放棄向日本市場投放純電動汽車e-up!而這款在日本被稱為e-up!的車型其實就是目前在我國有售的大眾electric-up!純電動車。而在“e-Golf”車型方面,大眾則計畫投放續航距離延長至300km以上的改進款。

大眾2014年10月曾在日本舉行了electric-up!發佈會,宣佈其價格為366.9萬日元(含稅),並於2015年2月開始受理electric-up!的訂單,但electric-up!配備的快速充電系統與日本國內的部分快速充電器不匹配,因此大眾方面推遲了交車日期。

然而,大眾曝出了非法規避尾氣規定的問題之後,大眾開始將業務重點從柴油車輛向電動車輛轉移,決定致力於開發將續航距離延長至250~500km的車型。而electric-up!的續航距離在JC08模式下為185km,與大眾的新戰略並不契合,所以大眾決定放棄向日本市場投放該車型。

而對於與electric-up!一樣曾宣佈投放日本市場的EV“e-Golf”,大眾則計畫更新其配備的鋰離子電池,投放將續航距離延長至300km以上的改進款。已在歐美上市的現行e-Golfe-,其續航距離在JC08模式下為215km,按美國國家環境保護局(EPA)標準計算為134km。

大眾今後在專供日本市場的電動車輛方面將以插電混合動力車(PHEV)為主。繼2015年導入PHEV“高爾夫GTE”之後,計畫2016年內投放“帕薩特GTE”。

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

【其他文章推薦】

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

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

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

你真的會寫單測嗎?TDD初體驗

前言:

  昨天讀到了一篇文章,講的是TDD,即Test-Driven Development,測試驅動開發。大體意思是,它要求在編寫某個功能的代碼之前先編寫測試代碼,然後只編寫使測試通過的功能代碼,通過測試來推動整個開發的進行。這有助於編寫簡潔可用和高質量的代碼,並加速開發過程。

  初讀之時,瞬間感受到了震撼,感覺和自己之前的開發流程全都不一樣,之前是由始至終,而這種思想確實以終為始。後來一查這種思想早在前幾年甚至前幾十年就被提出了,進而被廣泛運用到了敏捷開發中。看來是自己孤落寡聞了,於是我準備將這種思想用到今後的開發中,要做的第一件事,就是溫習如何寫用例。

為什麼是溫習?

  早在實習的時候,我們研發組就有寫用例的習慣,但是隨着開發逐漸熟悉,這種習慣不知不覺就被丟棄了,有頁面的點點點,沒頁面的看邏輯。相信有很多人也像我一樣,不知不覺就把這項技能丟棄了,接下來就讓我們一起,去重新撿起這項技能。

工具選擇

Junit

對於一個Java開發工程師來說,一提到寫單測,我們最先想到的,一定是Junit。下面是maven坐標

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

用Junit我們可以快速的,簡潔的用註解進行單元測試。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:conf/core/*.xml")
public class ObjTest {

  @Test
  public void testFunc(){
     //todo test          
  }
}

這裏要注意的是@ContextConfiguration註解中的路徑是Spring配置文件的位置。測試的方法必須是public的,且沒有返回值。

mockito

mockito是一個用於模擬對象的工具,我認為他也是測試工作中必不可少的一部分,詳細的介紹我推薦可以看一下:

人生苦短,我用Mockito 

比較不錯的入門案例,它的maven坐標地址為:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
</dependency>

Mock這種測試方法, 對比傳統的Junit測試,有如下好處:

    1. 不用每次測試的是時候,都初始化Spring容器,採用Mock的方式模擬對象,效率高
    2. 對象間的依賴關係,可以用Mock去表達,同時,我們不關心的部分,我們都可以用Mock的方式代替(比如對象A引用對象B的某某方法,但是我們不關係對象B方法實現,只想藉助方法,這個時候就可以Mock)
    3. 可以應對複雜的測試環境,比如方法調用順序、方法調用次數等等。

以下是Mock的一個小案例:

@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
    /**
     * mock對象
     */
    @Mock
    List<String> mockedList;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testMock() {
        // mock對象行為
        Mockito.when(mockedList.get(0)).thenReturn("one");
        Assert.assertEquals("one", mockedList.get(0));
        // 僅僅是mock了對象的行為,實際上列表還是空的
        Assert.assertEquals(0, mockedList.size());

        //驗證mock對象的get方法被調用過,且調用時的參數是0
        Mockito.verify(mockedList).get(0);
    }
}

這裡在使用@Mock的時候,必須事先調用MockitoAnnotations.initMocks(this),且使用@RunWith(MockitoJUnitRunner.class)

Jacoco

JaCoCo是一個開源的覆蓋率工具,支持多種覆蓋率的統計,其中包括:

    1. 行覆蓋率:度量被測程序的每行代碼是否被執行,判斷標準行中是否至少有一個指令被執行。
    2. 類覆蓋率:度量計算class類文件是否被執行。
    3. 分支覆蓋率:度量if和switch語句的分支覆蓋情況,計算一個方法裏面的總分支數,確定執行和不執行的 分支數量。
    4. 方法覆蓋率:度量被測程序的方法執行情況,是否執行取決於方法中是否有至少一個指令被執行。
    5. 指令覆蓋:計數單元是單個java二進制代碼指令,指令覆蓋率提供了代碼是否被執行的信息,度量完全 獨立源碼格式。
    6. 圈複雜度:在(線性)組合中,計算在一個方法裏面所有可能路徑的最小數目,缺失的複雜度同樣表示測 試案例沒有完全覆蓋到這個模塊。

下面是它的maven坐標:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
</dependency>

接下來我們用maven插件的方式,對jacoco進行配置

<plugin>
     <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
       <version>0.8.3</version>
       <configuration>
            <includes>
               <include>com/**/*</include>
            </includes>
            <!-- rules裏面指定覆蓋規則 -->
            <rules>
            <rule implementation="org.jacoco.maven.RuleConfiguration">
               <element>BUNDLE</element>
               <limits>  
               <!-- 指定方法覆蓋到50% -->
               <limit implementation="org.jacoco.report.check.Limit">
                   <counter>METHOD</counter>
                   <value>COVEREDRATIO</value>
                   <minimum>0.50</minimum>
                </limit>
                <!-- 指定分支覆蓋到50% -->
                <limit implementation="org.jacoco.report.check.Limit">
                    <counter>BRANCH</counter>
                    <value>COVEREDRATIO</value>
                    <minimum>0.50</minimum>
                 </limit>
                 <!-- 指定類覆蓋到100%,不能遺失任何類 -->
                 <limit implementation="org.jacoco.report.check.Limit">
                    <counter>CLASS</counter>
                    <value>MISSEDCOUNT</value>
                    <maximum>0</maximum>
                  </limit>
                  </limits>
              </rule>
              </rules>
         </configuration>
         <executions>
             <execution>
                <id>pre-test</id>
                  <goals>
                       <goal>prepare-agent</goal>
                   </goals>
             </execution>
             <execution>
                   <id>post-test</id>
                   <phase>test</phase>
                   <goals>
                       <goal>report</goal>
                   </goals>
             </execution>
       </executions>
  </plugin>

  這裏值得注意的是<include>com/**/*</include>指的是class文件的位置。做完這些以後,我們就可以生成報表了。因為我們是用maven插件的方式進行配置的,所以如果我們使用idea進行開發的時候,就可以看到右側maven一欄中出現了jacoco插件

 最常用的就是這兩個,一個是檢查配置是否正確,第二個是用來將exec文件,生成index.html用來進行觀察覆蓋率。

我們先執行maven中的test指令,這時,我們在target中就可以看到一個jacoco.exec文件。

有了這個jacoco.exec文件,就可以使用jacoco的report方法,來生成文件。

 右鍵index.html文件,選擇Reveal in Finder(Mac),windows也是類似,打開文件磁盤的位置。

 可以看到,由於這個項目之前沒有幾個單測,所以覆蓋率特別低。點開之後,就可以看到具體的代碼,非常的方便。

 最後今天配置jacoco的時候,踩了2個坑:

1 用idea進行開發的同學。使用jacoco的時候,不要勾選這個按鈕,它會跳過你測試階段的代碼執行,進而不會生成jacoco.exec文件。

 

 2 保證自己測試代碼沒有錯誤(尤其是項目中,由於代碼更新,測試用例沒有更新,導致的測試不可用)

這裏的現象是雖然可以生成jacoco.exec 文件,而且可以report成文檔,但是打開之後發現,代碼覆蓋率都是0。

最後:

希望大家都可以保持寫測試用例的好習慣,謝謝

 

 

 

 

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

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

TensorFlow2.0(10):加載自定義圖片數據集到Dataset

 

前面的博客中我們說過,在加載數據和預處理數據時使用tf.data.Dataset對象將極大將我們從建模前的數據清理工作中釋放出來,那麼,怎麼將自定義的數據集加載為DataSet對象呢?這對很多新手來說都是一個難題,因為絕大多數案例教學都是以mnist數據集作為例子講述如何將數據加載到Dataset中,而英文資料對這方面的介紹隱藏得有點深。本文就來捋一捋如何加載自定義的圖片數據集實現圖片分類,後續將繼續介紹如何加載自定義的text、mongodb等數據。

 

如果你已有數據集,那麼,請將所有數據存放在同一目錄下,然後將不同類別的圖片分門別類地存放在不同的子目錄下,目錄樹如下所示:

$ tree flower_photos -L 1

flower_photos
├── daisy
├── dandelion
├── LICENSE.txt
├── roses
├── sunflowers
└── tulips

 

所有的數據都存放在flower_photos目錄下,每一個子目錄(daisy、dandelion等等)存放的都是一個類別的圖片。如果你已有自己的數據集,那就按上面的結構來存放,如果沒有,想操作學習一下,你可以通過下面代碼下載上述圖片數據集:

In [ ]:

import tensorflow as tf
import pathlib
data_root_orig = tf.keras.utils.get_file(origin='https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
                                         fname='flower_photos', untar=True)
data_root = pathlib.Path(data_root_orig)
print(data_root)  # 打印出數據集所在目錄

 

下載好后,建議將整個flower_photos目錄移動到項目根目錄下。

In [1]:

import tensorflow as tf
import random
import pathlib
data_path = pathlib.Path('./data/flower_photos')
all_image_paths = list(data_path.glob('*/*'))  
all_image_paths = [str(path) for path in all_image_paths]  # 所有圖片路徑的列表
random.shuffle(all_image_paths)  # 打散

image_count = len(all_image_paths)
image_count

Out[1]:

3670

 

查看一下前5張:

In [2]:

all_image_paths[:5]

Out[2]:

['data/flower_photos/sunflowers/9448615838_04078d09bf_n.jpg',
 'data/flower_photos/roses/15222804561_0fde5eb4ae_n.jpg',
 'data/flower_photos/daisy/18622672908_eab6dc9140_n.jpg',
 'data/flower_photos/roses/459042023_6273adc312_n.jpg',
 'data/flower_photos/roses/16149016979_23ef42b642_m.jpg']

 

讀取圖片的同時,我們也不能忘記圖片與標籤的對應,要創建一個對應的列表來存放圖片標籤,不過,這裏所說的標籤不是daisy、dandelion這些具體分類名,而是整型的索引,畢竟在建模的時候y值一般都是整型數據,所以要創建一個字典來建立分類名與標籤的對應關係:

In [3]:

label_names = sorted(item.name for item in data_path.glob('*/') if item.is_dir())
label_names

Out[3]:

['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']

In [4]:

label_to_index = dict((name, index) for index, name in enumerate(label_names))
label_to_index

Out[4]:

{'daisy': 0, 'dandelion': 1, 'roses': 2, 'sunflowers': 3, 'tulips': 4}

In [5]:

all_image_labels = [label_to_index[pathlib.Path(path).parent.name] for path in all_image_paths]

In [6]:

for image, label in zip(all_image_paths[:5], all_image_labels[:5]):
    print(image, ' --->  ', label)

 

data/flower_photos/sunflowers/9448615838_04078d09bf_n.jpg  --->   3
data/flower_photos/roses/15222804561_0fde5eb4ae_n.jpg  --->   2
data/flower_photos/daisy/18622672908_eab6dc9140_n.jpg  --->   0
data/flower_photos/roses/459042023_6273adc312_n.jpg  --->   2
data/flower_photos/roses/16149016979_23ef42b642_m.jpg  --->   2

 

好了,現在我們可以創建一個Dataset了:

In [7]:

ds = tf.data.Dataset.from_tensor_slices((all_image_paths, all_image_labels))

 

不過,這個ds可不是我們想要的,畢竟,裏面的元素只是圖片路徑,所以我們要進一步處理。這個處理包含讀取圖片、重新設置圖片大小、歸一化、轉換類型等操作,我們將這些操作統統定義到一個方法里:

In [8]:

def load_and_preprocess_from_path_label(path, label):
    image = tf.io.read_file(path)  # 讀取圖片
    image = tf.image.decode_jpeg(image, channels=3)
    image = tf.image.resize(image, [192, 192])  # 原始圖片大小為(266, 320, 3),重設為(192, 192)
    image /= 255.0  # 歸一化到[0,1]範圍
    return image, label

In [9]:

image_label_ds  = ds.map(load_and_preprocess_from_path_label)

In [10]:

image_label_ds 

Out[10]:

<MapDataset shapes: ((192, 192, 3), ()), types: (tf.float32, tf.int32)>

 

這時候,其實就已經將自定義的圖片數據集加載到了Dataset對象中,不過,我們還能秀,可以繼續shuffle隨機打散、分割成batch、數據repeat操作。這些操作有幾點需要注意:
(1)先shuffle、repeat、batch三種操作順序有講究:

  • 在repeat之後shuffle,會在epoch之間數據隨機(當有些數據出現兩次的時候,其他數據還沒有出現過)
  • 在batch之後shuffle,會打亂batch的順序,但是不會在batch之間打亂數據。

(2)shuffle操作時,buffer_size越大,打亂效果越好,但消耗內存越大,可能造成延遲。

 

推薦通過使用 tf.data.Dataset.apply 方法和融合過的 tf.data.experimental.shuffle_and_repeat 函數來執行這些操作:

In [12]:

ds = image_label_ds.apply(tf.data.experimental.shuffle_and_repeat(buffer_size=image_count))
BATCH_SIZE = 32
ds = ds.batch(BATCH_SIZE)

 

好了,至此,本文內容其實就結束了,因為已經將自定義的圖片數據集加載到了Dataset中。

下面的內容作為擴展閱讀。

 

擴展

 

上面的方法是簡單的在每次epoch迭代中單獨讀取每個文件,在本地使用 CPU 訓練時這個方法是可行的,但是可能不足以進行GPU訓練並且完全不適合任何形式的分佈式訓練。

 

可以使用tf.data.Dataset.cache在epoch迭代過程間緩存計算結果。這能極大提升程序效率,特別是當內存能容納全部數據時。

在被預處理之後(解碼和調整大小),圖片就被緩存了:

In [13]:

ds = image_label_ds.cache()  # 緩存
ds = ds.apply(tf.data.experimental.shuffle_and_repeat(buffer_size=image_count))

 

使用內存緩存的一個缺點是必須在每次運行時重建緩存,這使得每次啟動數據集時有相同的啟動延遲。如果內存不夠容納數據,使用一個緩存文件:

In [14]:

ds = image_label_ds.cache(filename='./cache.tf-data')
ds = ds.apply(tf.data.experimental.shuffle_and_repeat(buffer_size=image_count))

 

參考

 

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

Elasticsearch系列—Elasticsearch的基本概念及工作原理

基本概念

Elasticsearch有幾個核心的概念,花幾分鐘時間了解一下,有助於後面章節的學習。

NRT

Near Realtime,近實時,有兩個層面的含義,一是從寫入一條數據到這條數據可以被搜索,有一段非常小的延遲(大約1秒左右),二是基於Elasticsearch的搜索和分析操作,耗時可以達到秒級。

Cluster

集群,對外提供索引和搜索的服務,包含一個或多個節點,每個節點屬於哪個集群是通過集群名稱來決定的(默認名稱是elasticsearch),集群名稱搞錯了後果很嚴重。命名建議是研發、測試環境、准生產、生產環境用不同的名稱增加區分度,例如研發使用es-dev,測試使用es-test,准生產使用es-stg,生產環境使用es-pro這樣的名字來區分。如果是中小型應用,集群可以只有一個節點。

Node

單獨一個Elasticsearch服務器實例稱為一個node,node是集群的一部分,每個node有獨立的名稱,默認是啟動時獲取一個UUID作為名稱,也可以自行配置,node名稱特別重要,Elasticsearch集群是通過node名稱進行管理和通信的,一個node只能加入一個Elasticsearch集群當中,集群提供完整的數據存儲,索引和搜索的功能,它下面的每個node分攤上述功能(每條數據都會索引到node上)。

shard

分片,是單個Lucene索引,由於單台機器的存儲容量是有限的(如1TB),而Elasticsearch索引的數據可能特別大(PB級別,並且30GB/天的寫入量),單台機器無法存儲全部數據,就需要將索引中的數據切分為多個shard,分佈在多台服務器上存儲。利用shard可以很好地進行橫向擴展,存儲更多數據,讓搜索和分析等操作分佈到多台服務器上去執行,提升集群整體的吞吐量和性能。
shard在使用時比較簡單,只需要在創建索引時指定shard的數量即可,剩下的都交給Elasticsearch來完成,只是創建索引時一旦指定shard數量,後期就不能再更改了。

replica

索引副本,完全拷貝shard的內容,shard與replica的關係可以是一對多,同一個shard可以有一個或多個replica,並且同一個shard下的replica數據完全一樣,replica作為shard的數據拷貝,承擔以下三個任務:

  1. shard故障或宕機時,其中一個replica可以升級成shard。
  2. replica保證數據不丟失(冗餘機制),保證高可用。
  3. replica可以分擔搜索請求,提升整個集群的吞吐量和性能。

shard的全稱叫primary shard,replica全稱叫replica shard,primary shard數量在創建索引時指定,後期不能修改,replica shard後期可以修改。默認每個索引的primary shard值為5,replica shard值為1,含義是5個primary shard,5個replica shard,共10個shard。
因此Elasticsearch最小的高可用配置是2台服務器。

Index

索引,具有相同結構的文檔集合,類似於關係型數據庫的數據庫實例(6.0.0版本type廢棄后,索引的概念下降到等同於數據庫表的級別)。一個集群里可以定義多個索引,如客戶信息索引、商品分類索引、商品索引、訂單索引、評論索引等等,分別定義自己的數據結構。
索引命名要求全部使用小寫,建立索引、搜索、更新、刪除操作都需要用到索引名稱。

type

類型,原本是在索引(Index)內進行的邏輯細分,但後來發現企業研發為了增強可閱讀性和可維護性,制訂的規範約束,同一個索引下很少還會再使用type進行邏輯拆分(如同一個索引下既有訂單數據,又有評論數據),因而在6.0.0版本之後,此定義廢棄。

Document

文檔,Elasticsearch最小的數據存儲單元,JSON數據格式,類似於關係型數據庫的表記錄(一行數據),結構定義多樣化,同一個索引下的document,結構盡可能相同。

工作原理

簡單地了解一下Elasticsearch的工作原理。

啟動過程

當Elasticsearch的node啟動時,默認使用廣播尋找集群中的其他node,並與之建立連接,如果集群已經存在,其中一個節點角色特殊一些,叫coordinate node(協調者,也叫master節點),負責管理集群node的狀態,有新的node加入時,會更新集群拓撲信息。如果當前集群不存在,那麼啟動的node就自己成為coordinate node。

應用程序與集群通信過程

雖然Elasticsearch設置了Coordinate Node用來管理集群,但這種設置對客戶端(應用程序)來說是透明的,客戶端可以請求任何一個它已知的node,如果該node是集群當前的Coordinate,那麼它會將請求轉發到相應的Node上進行處理,如果該node不是Coordinate,那麼該node會先將請求轉交給Coordinate Node,再由Coordinate進行轉發,搓着各node返回的數據全部交由Coordinate Node進行匯總,最後返回給客戶端。

集群內node有效性檢測

正常工作時,Coordinate Node會定期與拓撲結構中的Node進行通信,檢測實例是否正常工作,如果在指定的時間周期內,Node無響應,那麼集群會認為該Node已經宕機。集群會重新進行均衡:

  1. 重新分配宕機的Node,其他Node中有該Node的replica shard,選出一個replica shard,升級成為primary shard。
  2. 重新安置新的shard。
  3. 拓撲更新,分發給該Node的請求重新映射到目前正常的Node上。

小結

本篇章簡單的向大家介紹了一下Elasticsearch的基本概念和工作原理,讓大家有個比較淺顯的認識,後續會結合實際的例子,來了解一下Elasticsearch基本的用法。

專註Java高併發、分佈式架構,更多技術乾貨分享與心得,請關注公眾號:Java架構社區

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

【其他文章推薦】

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

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

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

環保署 7 月起 補助汰換二行車機車新購電動二輪車

為加速淘汰二行程機車並推廣電動二輪車,環保署 23 日預告訂定「淘汰二行程機車及新購電動二輪車補助辦法」。環保署表示,民眾汰換二行程機車並新購電動機車目前補助 3,000 元,未來將加碼補助,其中汰換二行程機車並新購重型電動機車,環保署加上經濟部總計補助 20,400 元,汰換二行程機車並新購輕型、小輕型電動機車總共補助 15,000 元。   環保署表示,二行程機車相較於四行程機車,碳氫化合物排放量約為 18 倍,一氧化碳排放量約為 2 倍,污染嚴重,因此於 2004 年實施機車第四期排放標準時,加嚴二行程機車的標準,促使國內不再生產銷售二行程機車,依據交通部車輛登記資料統計,截至今年 4 月底止,二行程機車仍有約 200 萬輛。   「淘汰二行程機車及新購電動二輪車補助辦法」中電動二輪車包括電動機車、電動自行車及電動輔助自行車等都有補助,民眾淘汰二行程機車並新購上述的電動二輪車,皆有補助,預計新補助辦法在 7 月 15 日開始推動,但環保署強調,若民眾只汰換二行車機車而沒有新購電動機車,環保署僅補助 1,500 元。

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

四部委,九大行業組織首次攜手新能源汽車展

2013、2014年第一屆和第二屆節能與新能源汽車成果展聚集了一汽集團、東風集團、上汽集團、北汽集團、長安集團、一汽大眾、上海大眾、上海通用、富豪汽車、一汽豐田、廣汽豐田、豐田中國、廣汽本田、北京現代、吉利汽車、華晨汽車、比亞迪汽車、江淮汽車、長城汽車、吉奧汽車、宇通客車、安凱客車等國內外主流車企紛紛集體參展,展品涵蓋乘用車、商用車、改裝車、專用車和零部件,集中展示了近年來在節能汽車、環保汽車、新能源汽車領域取得的最新成果。

2015十月,以“選擇•行動——未來從現在開始”為主題的2015(第三屆)節能與新能源汽車產業發展規劃成果展覽會(以下簡稱2015節能與新能源汽車成果展)將要在北京國家會議中心舉辦。

6月10日下午,“2015節能與新能源汽車產業發展成果彙報及展示會”新聞發佈會在北京隆重召開。從發佈會上獲悉,中國工業和信息化部將會同財政部、科技部、發展改革委等部門於今年10月共同在北京舉辦“2015年節能與新能源汽車產業發展成果彙報及展示會”,全面宣傳展示我國節能與新能源汽車發展取得的豐碩成果。中國汽車工業協會副秘書長葉盛基、中國貿促會機械行業分會副會長周衛東向各界通報了成果彙報及展示會的籌備情況。

成果展由會議和展會兩大部分構成

2015年節能與新能源汽車產業發展成果彙報及展示會主要由會議和展會兩大部分構成。

會議方面主要包括節能與新能源汽車發展成果彙報會、節能與新能源汽車技術研討會、電動汽車國際標準研討會、新能源汽車專利成果研討會和示範城市經驗交流會等內容。展會包括中國國際汽車新能源及技術應用展覽會、節能與新能源汽車發展情況回顧、節能與能源汽車發展前景展望以及節能與新能源汽車產業發展規劃成果展覽會

2015節能與新能源汽車成果展將分設整車展區、關鍵零部件展區、充電設施展區和試點城市展區,在重點展示25個創新工程項目研究成果基礎上,全面展示節能與新能源汽車產業發展的最新成果。今年展會參展企業覆蓋領域更廣,代表性更強,將全面展示目前國際節能與新能源汽車領域的產品和技術。電池、電機、電控等關鍵零部件企業,以及配套設施企業也將攜最新技術和產品參展。

互動體驗和趣味活動

本屆節能與新能源汽車成果展的亮點,除了以往產品和技術的靜態展示外,展會同期還將舉辦“尊享體驗”試乘試駕活動、全國高校汽車科技文化節、節能與新能源汽車寶貝嘉年華和BLUE-AUTO金秋惠享購車節等互動體驗和趣味活動。

尊享體驗”試乘試駕,將由參展車企提供數十輛節能與新能源車型給體驗者,讓現場觀眾可以親身體驗節能與新能源汽車的“好開”、“安全”、“省錢”、“環保”和“智慧”等優點,同時展示各車型優秀的動力性和經濟性。同期互動體驗和趣味活動不僅為參展企業提供了更多車輛性能表現的空間,也為觀眾帶來更加豐富多彩的觀展體驗。

2015年節能與新能源汽車產業發展成果彙報及展示會

時間:2015年10月21-24日
地點:北京•國家會議中心

組織機構:
主辦單位:工業和信息化部、財政部、科技部、發展改革委
協辦單位:中國汽車工業協會、 中國汽車技術研究中心、中國汽車工程學會、中國汽車工程研究院股份有限公司、中國電工技術學會、中國國際貿易促進委員會機械行業分會、中國國際貿易促進委員會汽車行業分會、汽車知識雜誌社、寰球時代汽車投資管理(北京)有限公司等單位。
承辦單位:北京中汽四方會展有限公司等。
合作單位:北京盛大超越國際展覽有限公司

展會諮詢:
連絡人:嶽巍                               
手  機:+86 135 5286 5285                           
電  話: +86 10 6329 0215                   
傳  真: +86 10 5141 8155
E-mail:

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

特斯拉儲能系統肥單 健和興搶下綠能連接器供應

特斯拉(Tesla)電動車與儲能系統雙動能啟動,股價創下歷史新高,健和興接獲 Tesla 的綠能連接器,將從本季開始出貨,F-貿聯也可望挾供應鏈優勢,提高份額。   儲能系統在家庭應用已在許多地區推行,並且陸續獲得日本、德國、美國、中國大陸等政府補助。健和興過去只是小量送樣 Tesla 電動車零件,但在 Tesla 今年 4 月底發布的公用與家用儲能計畫中,健和興確定成為綠能連接器供應商,並已小量出貨,法人預估,供應鏈的首波放量時機將落在今年第 3 季末。   法人預估,健和興綠能連接器目前已獲大額訂單,可望為下半年每月營收貢獻逾千萬元台幣,並有逐月增加趨勢。

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

【其他文章推薦】

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

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

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

Jmeter與壓測相關概念

相關概念

RT(response time)

什麼是RT? RT就是指系統在接收到請求和做出相應這段時間跨度

但是值得一提的是RT的值越高,並不真的就能說明我們的系統的吞吐量就很高, 比如說,如果存在數據在網絡中傳輸時出現了丟包的現象,傳輸的數據少了,速度就會增加, 但是這是事故,不是說我們的系統吞吐量高

此外,對不同的系統來說衡量的標準也不一樣,對一個遊戲軟件來說,響應時間也就是常說的延遲. 在100ms以內,遊戲體驗感會很好,飆升到幾秒鐘,乾脆就不要玩了, 但是對一個編譯系統來說,編譯一套源代碼可能好幾十分鐘,人們也願意等

java應用程序中的GC也會導致系統的總體RT飆升

Throughput 吞吐量

什麼是吐吞量呢? 百度百科: 廣義的吞吐量是: 單位時間內成功的傳輸數據的數量, 在我們進行壓力測試得出的結果中, 可以將吞吐量理解成系統在單位時間內成功處理的請求的數量

一個系統的吞吐量和request對CPU的消耗,外部的接口以及IO等因素緊密相關,

比如一個web應用代碼寫的再漂亮,但是每次請求都會去查詢數據庫,併發數上來后,數據庫就會佔用大量的CPU負載,系統的IO飆升,甚至可能導致其他軟件不得不等待mysql先執行完才能搶到CPU的時間分片. 系統的瓶頸積壓到mysql這裏,這個web應用的吞吐量一定不會很高

此外,一般我們都是這樣描述吞吐量: 在併發數為xxx時,系統的吐吞量為yyy

併發用戶數

它指的是系統可以承載的, 可以同時正常使用網站的用戶數量, 這個指標似乎看起來可以比吞吐量更加直觀反應系統的性能, 但是往往系統中的用戶又有不同的行為, 比如未註冊的, 在線的, 同時發送請求的等等, 簡而言之, 可以考慮用在線的用戶和同時發送請求的用戶數作為性能指標, 把在線的用戶當成性能指標更直觀, 把同時發送請求的用戶數量當成性能指標更準確

QPS (query per seconds)

每秒的查詢率, 用來權衡服務器在規定的時間內處理的流量數

計算公式: QPS = req / sec , 即平均每秒的請求量

TPS (transition per seconds)

TPS (transaction per second)代表每秒執行的事務數量,可基於測試周期內完成的事務數量計算得出。例如,用戶每分鐘執行6個事務,TPS為6 / 60s = 0.10 TPS。同時我們會知道事務的響應時間(或節拍),以此例,60秒完成6個事務也同時代表每個事務的響應時間或節拍為10秒。

PV和UV

PV訪問量 (Page View) 每打開一次頁面或者刷新一次頁面 pv+1, 它反應的的網站的頁面被訪問的次數

UV訪問數(Unique Visitor) 即, 獨立訪客的訪問數, 換句話就是一台電腦算一個訪客,

  • 通過QPS估算PV

公式1 : pv = QPS*3600*6

公式2: pv = QPS*3600*8

  • 根據QPS,PV估算服務器的數量

服務器的數量= 每天的總PV / 單台服務器的PV

原理: 每天80%的訪問集中在了當前的20%的時間段, 這20%的時間就叫做峰值時間

峰值時間段 QPS = 總pv數*0.8 / 每天的秒數*0.2

Jmeter

jmeter能做什麼?

Jmeter也是apache的頂級項目, 通過jmeter我們可以測試靜態和動態資源,web動態應用程序的性能, 還可以用來模擬服務器,服務器中,網絡或者對象上的高負載, 測試他們的強度,以及不同負載下的總體性能

使用環境: Windows

使用的思路: 在jmeter提供的可視化頁面中,添加一個一個的指定的模塊. 對我們的web項目中指定的接口進行壓力測試,當然它不僅僅使用於發送http請求測試web項目的資源接口

添加什麼模塊呢?

  • 線程組: 也就是啟動多少條線程對系統壓測, 線程是否併發的啟動
  • http的默認參數: 比如protocol host port 等等
  • 添加請求的參數/請求體/cookie等信息
  • 添加監聽器來显示壓測結果

實例:

添加線程組,每輪同時啟動1000條線程對系統進行壓測,重複1輪

添加默認使用的請求參數, 這個默認的請求參數並不要求強制添加,只是為了以後在具體的某個http請求壓測模塊不寫請求參數時,使用這裏面的默認參數

配置信息如下:

添加一個sample, 這個sample其實就是http請求, 一個具體的http請求, 用大白話說 ,我們想壓測系統中的登錄方法,就添加一個登錄sample, 想壓測系統中拉取個人信息的方法, 就添加一個 個人信息sample

sample詳細配置

可以看到上圖中我們可以添加request Param request body, 上傳文件, 甚至可以添加一個模塊添加請求的cookie模塊

添加Listenner, 選擇聚合報告 ,開始壓測得到下面的結果,我們關注圖中的吞吐量

支持使用配置文件中的數據當成壓測的參數, 使用場景: 通過這個配置文件的配置,我們可以模擬出多用戶併發訪問系統的場景,下面配置中的每一行都是一個用戶的信息,jmeter會自動讀取這個配置文件中的每一行,使用這裏面的信息進行壓力測試,直到達到了用戶指定的請求量才結束

編寫配置文件

導入配置文件

使用配置文件,詳細的配置細節我都標在了圖片中

發送請求

使用環境: linux

第一步: 在window上錄好 XXX.jmx 文件

第二步: 啟動

sh jmeter.sh -n -t XXX.jmx -l result.jtl

第三步:將result.jtl導回到window上的jmeter中在可視化頁面中查看結果

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

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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