2014年12月25日 星期四

[elasticsearch]從 Elasticsearch index 與基本概念談起



從 Elasticsearch index 與基本概念談起


"index" 索引 這個詞常常在談論Elasticsearch 的時候被誤用太多,從核心概念談起,很多表現出來的行為就不言自明了。

index (索引)


"index" 在 Elasticsearch 中可以把它類比成關聯式資料庫的資料庫(database)概念。index即是存放與索引資料的一個單位。事實上,在底層中 index 是一個邏輯的namespace,它指向若干個shards(分片)。
"to index" 也意味著,使用Elasticsearch索引你的資料。你的資料會為了要搜尋而索引且存放起來。

inverted index (倒排索引)

倒排索引是一個在Lucene 底層為了加快數據搜索的一種資料結構。
透過處理數據的過程,萃取出獨特的 terms 或是 tokens ,然後記下來 terms 包含了哪些documents。

shard

shard 是一個 Lucene 的實例,也就是說,shard才是實際是上,在Lucene操作的"index"。在Elasticsearch中,一個index可以由若干個shard組成。
"primary shard" 是主要的一個部分, "replica shard" 是 "primary shard"的副本。
"replica shard" 主要的作用就是當 primary shard 失效時的 failover ,還有可以增加讀取的throughpu。

segment (段)

每個shard通常都包還著多個segment,每個segment都是一個"倒排索引"。
當我們在索引文件時,elasticsearch會先把那些資料收集到記憶體當中(當然其中有 trasation log來確保資料不會遺失),Elasticsearch 預設會在每秒寫一個新的segment到硬碟中,必且刷新(refresh)它,讓使用者可以搜尋到資料。

這也就是,Elasticsearch一直被標榜的Near Realtime search engine。
雖然,這些新的資料已經可以被搜尋,但是並還沒有fsync'ed 到硬碟。 每隔一段時間,Elasticsearch會flush這些資料,也就是意味 fsyncing 這些 segments(也就是說 這些 document已經commited )在此同時也會把 transation log 清掉,因為新的數據已經被寫到硬碟。

一個index包含了越多的segments也就意味著需要更多的search時間。所以,Elasticsearch會在背景中,把大小相似的segment 合併一個更大的segment。(這個過程稱作merge,elasticsearch 預設使用 tier 的 merge policy。) 一旦新的segment產生了,舊的segment就會被棄用。這個 merge的過程中,若是有很多塊相似大小的segment,就會從比較大塊的開始進行merge。


segment具有"不可變更"(immutable)的特性。當index內的documents被更新時,事實上,它只是先標記把舊的document標記成刪除,然後再索引新的document。Merge 進行時,就會順便把這些舊的已經刪除的document實際刪除。(不合併在新的segment內)


2015 聖誕夜







咚 一百 聖誕快樂 Merry Christmas 每年的這一天 聖誕節子夜崇拜

每一年的今天對於每個東海人心中都有一個藏在心裡的回憶,
猶記當年東海風,好似就在昨日。

                           2015 平安夜

2014年12月23日 星期二

[life] 生活總要有個改變 每月財經書之旅



生活總要有些改變,這週末在圖書館在就在想說,何不訂下一些計畫,每月來固定點財經書。


本月書單


30歲之後,你想要多有錢?
博客來-30歲之後,你想要多有錢?:就算完全不懂理財,這樣開始做股票、基金、買房,你一輩子有錢
http://www.books.com.tw/products/0010567339

2014年12月21日 星期日

[武術]141220 六 141221 日 吳式太極拳


週六 比較稍微比較晚到
看到師姐正跟老師請教半段的細節,
過了一陣子,我們就在打一次拳趟。


打完之後,老師就說跟師兄請教一下推手。


剛勁

師兄再推完手,以後跟我說,我的手部的支撐的剛勁要鍛鍊出來。
發力的時候結構,就是,好像脊椎後面被撐著(命門),如果要加上往前的力量,可以前腳虛腳,然後往前,但是要維持剛體與角度不變得情況下往前撐。

再來就是纏絲勁,不是單向的力量,還是整體的扭轉。


週日

在打完拳後,老師說,只要一鬆氣就能打出,拳架裡面很多動作,都是你熟練以後,才能用。

跟師兄推手練習,老師先說了,目前先練習四隅推手,之後還有很多種多樣的推手方式,更能夠感觸別人的力量。

跟師兄推完手後,我請問他說,肩膀好像打不開,被壓住,
要把肩往前,有靈活度才能轉動。

後來又提到幾個概念在打拳中可以訓練筋骨,
先不要平衡把單腳直接提起來 然後在不平衡中 肌肉無法作用時 就使用筋的力量去做提的
師兄舉了一本陳式太極拳的架子來看前人很多都在不平衡時 抬腳 然後 以垂直線來看離重心腳滿遠的。

2014年12月19日 星期五

[think] 關於旅程的目的



“旅遊景點本身從不是旅程的目的,而是在旅途中找到一個看待事物的新角度.”

– Henry Miller

2014年12月18日 星期四

[linux][redis]MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled.


MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

2014年12月16日 星期二

[linux][redis](error) ERR max number of clients reached


127.0.0.1:6379> llen logimport
(error) ERR max number of clients reached


Maximum number of clients

In Redis 2.4 there was an hard-coded limit about the maximum number of clients that was possible to handle simultaneously.
In Redis 2.6 this limit is dynamic: by default is set to 10000 clients, unless otherwise stated by the maxmemory directive in Redis.conf.
However Redis checks with the kernel what is the maximum number of file descriptors that we are able to open (the soft limit is checked), if the limit is smaller than the maximum number of clients we want to handle, plus 32 (that is the number of file descriptors Redis reserves for internal uses), then the number of maximum clients is modified by Redis to match the amount of clients we are really able to handle under the current operating system limit.
When the configured number of maximum clients can not be honored, the condition is logged at startup as in the following example:
$ ./redis-server --maxclients 100000
[41422] 23 Jan 11:28:33.179 # Unable to set the max number of files limit to 100032 (Invalid argument), setting the max clients configuration to 10112.
When Redis is configured in order to handle a specific number of clients it is a good idea to make sure that the operating system limit to the maximum number of file descriptors per process is also set accordingly.
Under Linux these limits can be set both in the current session and as a system-wide setting with the following commands:
  • ulimit -Sn 100000 # This will only work if hard limit is big enough.
  • sysctl -w fs.file-max=100000

redis报-ERR max number of clients reached错误 – 酷喃|coolnull|

2014年12月12日 星期五

[logstash]check field exits 判斷 event 是否包含某欄位




在 filter 中,常常有時候要確認是否有某個field存在再繼續進行,
可以使用 logstash 的 condition 。



if ![someotherfield] {
   do something not including the [someitherfield]
else 
   do something including the [somotherfield]
}


如此就可以判斷 event 是否有包含該欄位,如果欄位存在就做若干操作。


2014年12月11日 星期四

[linux]using cron date variables


using cron date variables
常常有個情境,在使用 crontab run 時,需要把結果歸檔到當天的資料夾或檔案裡面,這時候就會使用,date command 的 format。
在cron內,使用 date variables 遇到 % format 時候就被break了。
一個範例表示

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

一般而言 可以省略 user-name ,直接寫command。


如果直接使用下面語句會遇到 % 跳脫了。

    *  *  *  *  * /bin/bash /root/pc_back/logstash/script/stat_count.sh >>  "/root/pc_back/logstash/script/stat_count.2stat."`date +%Y%m%d`

必須加上 "%" 來讓 date 成功執行


*  *  *  *  * /bin/bash /root/pc_back/logstash/script/stat_count.sh >>  "/root/pc_back/logstash/script/stat_count.stat."`date +\%Y\%m\%d`



2014年12月7日 星期日

[life] 新生活新運動 PATHFINDER



最近狗屁倒灶的事情太多了,
不過也算是認清一些事情與真理。

不必為了別人而停留下腳步,
反而要更加堅定自己的想法,加快自己的行動。

這就是一個新生活運動的開始了。

PATHFINDER ~

2014年12月5日 星期五

[python]remove null byte "TypeError: must be string without null bytes, not str"



problems

Traceback (most recent call last):
  File "change_wallpaper.py", line 39, in <module>
    os.popen(cmd_first+' ; '+cmd)
TypeError: must be string without null bytes, not str

sol

use rstrip remove the trailling NULLs

str.rstrip('\n')



2014年12月4日 星期四

[linux][ubuntu]W: GPG error



W: A error occurred during the signature verification.
The repository is not updated and the previous index files will be used. GPG error:http://extras.ubuntu.com quantal Release: 
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 16126D3A3E5C1192

W: GPG error: http:// archive.canonical.com quantal Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

在做 apt-get update 時,若出現  GPG key missing or GPG key error的狀況

先找到 error message 標示的 key 3B4FE6ACC0B21F32

#  gpg --keyserver pgpkeys.mit.edu --recv-key 3B4FE6ACC0B21F32
# gpg -a --export 3B4FE6ACC0B21F32 | apt-key add -


or 

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5

note.
後面標示的key 務必替換成 error message內的 key

2014年12月3日 星期三

[tech_note] 新任台北市長柯P使用GitBook 編寫 政策白皮書



Taipei's new mayor writes a GitBook
https://www.gitbook.com/blog/authors/taipei-mayor-writes-gitbook

新任的台北市長柯文者使用 gitbook來編寫他的官方版政策白皮書。

柯文哲醫師與他的團隊在週六贏得了選戰(141229)。

本週的早些時候他們決定使用gitbook 發佈與分享他們的官方版的政策白皮書。

他們的白皮書(whitebook)獲得廣泛的成功,在選前幾天,不到五天吸引了25萬人的瀏覽,更在facebook上獲得了 36000 個讚(like),更有數以百萬計的台北市民瀏覽。

有趣的是政治家正在走向這條擁抱數位的時代,並且使用電子書公開的與市民分享他的計畫與想法。這種透明度屎的公民得以讓他們的想法反饋到政治家的競選活動上。

我們看到使用GitBook當做一個平台,不論其社會地位年齡經驗,它使每個人都可以公開編寫並且分享他們的想法。我們希望,柯醫師的例子能夠激勵更多人加入。

最後,我們恭賀柯醫生與他們競選團隊獲得勝利,也祝他們好運,希望在未來幾年,他們能幫助台北成長,使台北變成一個更國際化的城市。