popcorny 積分 0

你這個Theme好讚! 我都想要搬過去了..

popcorny 積分 0

感覺跟jekyll超級像!! 台灣人開發的就是要推一下!! 不過太晚發現了.. :Q

popcorny 積分 5 編輯於

哈哈。的確我寫的太武斷。我當初腦袋中所想的是,問題"可以適合用parallel"就用parallel,但不能說所有問題都適合平行。直接這樣寫確實不太恰當。

那什麼叫做適合parallel?

  1. 你跑的job要夠長!! 如果跑的東西都是瞬殺,那就直接用sequential跑就好了。
  2. 可以Split。可能input本身就可以split那最好,如果你中間的某一段開始一分多,例如collectors.groupingBy,那就可以讓後續的aggregation平行做。
  3. 問題本身適不適合平行。如果你的filter, mapper會有side effect,那就不能平行。reducer有沒有交換律結合律的特性,沒有也不適合平行。
  4. 輸出需不需要符合原有順序。如果你只是想要stream.map().foreach()。那是不是還想要某個順序執行。

以上幾點都非常重要,很多時候你的東西在沒有parallel是對的,但是丟到平行就錯了。當然如果以上都符合,那用parallel的好處就是善用你的每個CPU Core。看到CPU榨乾才會有滿滿的效能啊!!

另外不一定說要用Stream的平行,也不一定直接用ForkJoinExecutor。用CompletableFuture + Sequencial Stream也可以輕鬆善用CPU Multicore的好處。

popcorny 積分 0

可以用parallel當然用parallel,這樣才可以利用到Multicore的好處。

popcorny 積分 1

同意。他的例子是極端簡單的iteration,且跑10M次,才會覺得改善顯著。但一般情況可能I/O, decompress, deserialize, string processing這些都完全大於stream overhead

popcorny 積分 0

我猜可能是那個key要一致吧。畢竟用到原始table的paritionkey,某些方面比較像是另一種類似foreign key的概念,但是這就跟cassandra設計邏輯比較不一致了。

popcorny 積分 1

這個好!! 尤其是對Cassandra這種一天到晚在denormalize得更棒。而且對client side不用改,就可以讓未來新增的Materialized View也有資料進來,真是太棒了。

不過不太懂這一段

Materialized views do not have the same write performance characteristics that normal table writes have The materialized view requires an additional read-before-write, as well as data consistency checks on each replica before creating the view updates. These additions overhead, and may change the latency of writes.

感覺實作上不需要read-before-write啊

popcorny 積分 3
我一直覺得Collection Pipeline的Map跟MapReduce的Map很容易讓大家搞混,很多人常常認為同一件事情。例如文章中。
With these two operations on the menu, calculating the total word count is a two-step pipeline.

some_articles
  .map{|a| a.words}
  .reduce {|acc, w| acc + w}

如果你以為這樣寫就等同於MapReduce那就錯了。我們講的MapReduce的Map比較像是sql的group by, reduce是aggregation function。reduce就跟collection pipeline的一樣,MapReduce的map在java stream裡面是用Collectors.groupingBy,並且搭配collect去使用。

所以不要再說我用Java8做MapReduce,然後只用map()跟reduce()了。先試著寫一個WordCount才比較清楚什麼叫做MapReduce。

popcorny 積分 0 編輯於

這位openx的大大什麼時候回台灣分享?

popcorny 積分 6

最大的進步是新增了R的支援。看起來最近資料分析大大崛起,不只個資料庫都開始要增加R的Support,而各個生態系也漸漸看到R的身影。 還有Spark也漸漸變成資料分析的第三生態系

  1. R。原本就是有Total Solution。統計, ML, dataframe, 原生的線性代數, 還有豐富的視覺化功能,IDE也有R Studio
  2. Python。統計線代有scipy/numpy, ML有Scikit-Learn, dataframe有pandas, 資料視覺化有matplotlib,還有ipython notebook的加持
  3. Spark。統計ML線性代數就是在MLLib,dataframe從1.3之後把原本的SparkSQL更一般化成DataFrame。現在只差好用的分析IDE。

前兩個適合Agile的分析應用。Spark負責online大數據的分析處理。

popcorny 積分 0

我覺得大家講的都對,只是著眼點不同而已 XD

popcorny 積分 1 編輯於

如果你是說跟其他家的Iaas比,我就沒意見 XD

我以為是跟Cassandra, ElasticSearch比。

還有Azure的上限我知道,但是那個是到那個點的時候,我想真正scalable的問題不會只有那個 XD。500TB是一個很可怕的量,而且是IOPS的上限比較可能先達到頂。還有那個Account是Storage Account,不是真正一個Account,所以沒有到那麼緊繃。

我同意你說的量夠大,需要人力的部分。這種成本是不會少的,不管用哪一種solution。HDFS也不是沒有自己的成本需要考量,NameNode的ScaleUp也是要處理的。

popcorny 積分 4 編輯於

請問是跟什麼比?

如果是說跟類似AWS Glacier這種專門備份用的,的確是。 如果是跟HDFS,BlobStorage會比較便宜,也不用自己Ops,Scalability我不知道有什麼問題? IOPS或頻寬上限? HDFS的優點是用Hadoop MR會快上許多。

如果Storage分類

  • RDBMS: MySQL, PostgreSQL,
  • Row-Based NoSQL: MongoDB, ElasticSearch, ..
  • BigTable-based NoSQL: Cassandra, HBase
  • HDFS
  • IaaS Blob Storage: S3, Azure BlobStorage, GCP Storage

以下是我的見解,歡迎打槍 XD

  • Cost Effective: RDBMS = Row-based < BigTable-based < HDFS < IaaS
  • Scalability: RDBMS < Row-Based < BigTable-based < IaaS = HDFS
  • Query/Aggregation Ability: RDBMS > Row-based > BigTable-based > IaaS = HDFS
  • Ops Complexity: IaaS < RDBMS < Row-Based < HDFS = BigTable-based

另外Query的能力在特別說明一下 像ElasticSearch這種Full-Text Engine當然在Fulltext query是強項 再來Document based當然在Hierarchy的資料query是強項 傳統RDBMS最強的還是join,還有大家都會的SQL。所以我才會有RDBMS > Row-Based NoSQL 這種結論。

回主題的Cassandra就是犧牲Query換取Scalability。但是比Distributed File System還是rich一些。

還有RDBMS,Row-Based都是把Storage, Query合一。相對的,BigTable-Based, IaaS, HDFS基本上都沒有Query Engine。所以要搭配外部的Query方法。

popcorny 積分 0 編輯於

我自己是沒有那麼排斥Azure啦..

popcorny 積分 0 編輯於

因為絕大多數的人還是用AWS啊 XD

話說Hadoop 2.7增加了對azure blobstorage1的支援,一整個覺得存BlobStorage很有搞頭

popcorny 積分 2 編輯於

elaticsearch適合分析log,不適合存log。更極端講,Log最適合的是放HDFS或S3 XD

popcorny 積分 0

我覺得functional programming中的monad跟FT的domain transform有異曲同功之妙

popcorny 積分 1

架構好漂亮,用了很多看起來很有趣的東西!! 想試rxandroid, dagger, retrofit.. 看的都想要重新來寫Android了 XD

還有Kaif真的很有心,那麼早就提供了OAuth,而且文件充足,真的不簡單!!

popcorny 積分 2

Queue版的Redis,作者也是同一個..

雖然Redis也可以當Queue,但是針對Queue的應用特別優化..

  1. 支援At-least once跟At-most once semantic
  2. 支援Cluster,是分類在AP (CAP分類),每個Node都是同樣Role,所以是Multi-Master的架構
  3. 支援Async Send
  4. 支援Queue Message Ordering
  5. 支援In-Memory跟Append Only File兩種模式
  6. 簡單易用。基本上用法跟Redis沒什麼兩樣,甚至有些Redis client可以直接操作。

目前還是Alpha階段,要拿來Production用的話請自行負責 XD