導航:首頁 > 網路數據 > mongodb大數據量統計

mongodb大數據量統計

發布時間:2023-10-19 12:25:00

㈠ 漫談工業大數據9:開源工業大數據軟體簡介(上)

今天真是一個美好的時代,有無數的開源系統可以為我們提供服務,現在有許多開發軟體可以用到工業大數據中,當然很多系統還不成熟,應用到工業中還需要小心,並且需要開發人員對其進行一定的優化和調整。下面就簡單介紹一些開源的大數據工具軟體,看看有哪些能夠應用到工業大數據領域。

下面這張圖是我根據網上流傳的一張開源大數據軟體分類圖整理的:

我們可以把開源大數據軟體分成幾類,有一些可以逐步應用到工業大數據領域,下面就一一介紹一下這些軟體。(以下系統介紹大都來源於網路

1、數據存儲類

(1)關系資料庫MySQL

這個就不用太多介紹了吧,關系型資料庫領域應用最廣泛的開源軟體,目前屬於 Oracle 旗下產品。

(2)文件資料庫Hadoop

Hadoop是大數據時代的明星產品,它最大的成就在於實現了一個分布式文件系統(Hadoop Distributed FileSystem),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的硬體上,而且它提供高吞吐量來訪問應用程序的數據,適合那些有著超大數據集的應用程序。

Hadoop可以在工業大數據應用中用來作為底層的基礎資料庫,由於它採用了分布式部署的方式,如果是私有雲部署,適用於大型企業集團。如果是公有雲的話,可以用來存儲文檔、視頻、圖像等資料。

(3)列資料庫Hbase

HBase是一個分布式的、面向列的開源資料庫,HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關系資料庫,它是一個適合於非結構化數據存儲的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

基於Hbase開發的OpenTSDB,可以存儲所有的時序(無須采樣)來構建一個分布式、可伸縮的時間序列資料庫。它支持秒級數據採集所有metrics,支持永久存儲,可以做容量規劃,並很容易的接入到現有的報警系統里。

這樣的話,它就可以替代在工業領域用得最多的實時資料庫。

(4)文檔資料庫MongoDB

MongoDB是一個介於關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

MongoDB適合於存儲工業大數據中的各類文檔,包括各類圖紙、文檔等。

(5)圖資料庫Neo4j/OrientDB

圖資料庫不是存放圖片的,是基於圖的形式構建的數據系統。

Neo4j是一個高性能的,NOSQL圖形資料庫,它將結構化數據存儲在網路上而不是表中。它是一個嵌入式的、基於磁碟的、具備完全的事務特性的java持久化引擎,但是它將結構化數據存儲在網路(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟資料庫的所有特性。程序員工作在一個面向對象的、靈活的網路結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、 企業級 的資料庫的所有好處。

OrientDB是兼具文檔資料庫的靈活性和圖形資料庫管理 鏈接 能力的可深層次擴展的文檔-圖形資料庫管理系統。可選無模式、全模式或混合模式下。支持許多高級特性,諸如ACID事務、快速索引,原生和SQL查詢功能。可以JSON格式導入、導出文檔。若不執行昂貴的JOIN操作的話,如同關系資料庫可在幾毫秒內可檢索數以百記的鏈接文檔圖。

這些資料庫都可以用來存儲非結構化數據。

2、數據分析類

(1)批處理MapRece/Spark

MapRece是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Rece(歸約)",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。 當前的軟體實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Rece(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。

Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。

這些大數據的明星產品可以用來做工業大數據的處理。

(2)流處理Storm

Storm是一個開源的分布式實時計算系統,可以簡單、可靠的處理大量的數據流。Storm有很多使用場景:如實時分析,在線機器學習,持續計算,分布式RPC,ETL等等。Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快(在一個小集群中,每個結點每秒可以處理數以百萬計的消息)。Storm的部署和運維都很便捷,而且更為重要的是可以使用任意編程語言來開發應用。

(3)圖處理Giraph

Giraph是什麼?Giraph是Apache基金會開源項目之一,被定義為迭代式圖處理系統。他架構在Hadoop之上,提供了圖處理介面,專門處理大數據的圖問題。

Giraph的存在很有必要,現在的大數據的圖問題又很多,例如表達人與人之間的關系的有社交網路,搜索引擎需要經常計算網頁與網頁之間的關系,而map-rece介面不太適合實現圖演算法。

Giraph主要用於分析用戶或者內容之間的聯系或重要性。

(4)並行計算MPI/OpenCL

OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向 異構系統 通用目的並行編程的開放式、免費標准,也是一個統一的編程環境,便於軟體開發人員為高性能計算 伺服器 、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他並行處理器,在 游戲 、 娛樂 、科研、醫療等各種領域都有廣闊的發展前景。

(5)分析框架Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapRece統計,不必開發專門的MapRece應用,十分適合數據倉庫的統計分析。

(6)分析框架Pig

Apache Pig 是apache平台下的一個免費開源項目,Pig為大型數據集的處理提供了更高層次的抽象,很多時候數據的處理需要多個MapRece過程才能實現,使得數據處理過程與該模式匹配可能很困難。有了Pig就能夠使用更豐富的數據結構。[2]

Pig LatinPig Latin 是一個相對簡單的語言,一條語句 就是一個操作,與資料庫的表類似,可以在關系資料庫中找到它(其中,元組代錶行,並且每個元組都由欄位組成)。

Pig 擁有大量的數據類型,不僅支持包、元組和映射等高級概念,還支持簡單的數據類型,如 int、long、float、double、chararray 和 bytearray。並且,還有一套完整的比較運算符,包括使用正則表達式的豐富匹配模式。

㈡ MongoDB的統計查詢和條件統計查詢問題請教

db.user.find().count(); ==> 這個快是因為 _id作為主鍵是一個相對小的索引


而對應的mysql里是走的全表掃描


如果你設計的表結構很滿足範式,那麼其實並不是MongoDB所擅長的場景,你不會覺得mongodb有多快

db.comit在線教育

㈢ mongoDB應用篇-mongo聚合查詢

如果我們在日常操作中,將部分數據存儲在了MongoDB中,但是有需求要求我們將存儲進去的文檔數據,按照一定的條件進行查詢過濾,得到想要的結果便於二次利用,那麼我們就可以嘗試使用MongoDB的聚合框架。

前面我們在學習文檔查詢的過程中,也介紹過一些查詢的操作符,其中就有一部分是簡單的查詢聚合函數,例如 count 、 distinct 、 group 等,如果是簡單的數據分析過濾,完全可以使用這些自帶的聚合函數以及查詢的操作符來完成文檔的過濾查詢操作

如果我們遇到了一些數據需要跨多個文本或者統計等操作,這個時候可能文檔自身也較為復雜,查詢操作符已經無法滿足的時候,這個時候就需要使用MongoDB的聚合查詢框架了。

使用聚合框架可以對集合中的文檔進行變換和組合查詢,基本上我們使用的時候,都是使用多個構件創建一個管道,用於對一連串的文檔進行處理。這里的構件包括 篩選(filter) 、 投射(projecting) 、 分組(grouping) 、 排序(sorting) 、 限制(limiting) 以及 跳過(skipping)

MongoDB中需要使用聚合操作,一般使用 aggregate 函數來完成多個聚合之間的連接,aggregate() 方法的基本語法格式如下 :

現在假設我們有個集合articles,裡面存儲了文章的集合,大致如下:

但這時我們需要查詢出來每一個作者寫的文章數量,需要使用aggregate()計算 ,大致如下:

輸出的結果為:

通過這個簡單的案例我們就能輸出想要的數據和屬性名,大概分析一下剛剛的聚合查詢語句, by_user欄位進行分組,代表每個用戶一條數據,而num_tutorial則是定義了數值類型計算的結果欄位,$sum則是計算總和,相當於每個用戶出現一次,都會+1,最終計算出來的總和通過num_tutorial欄位進行輸出

註:如果管道沒有給出預期的結果,就需要進行調試操作,調試的時候,可以嘗試先給一個管道操作符的條件,如果這個時候查詢出來的結果是我們想要的,那麼我們需要再去指定第二個管道操作符,依次操作,最後就會定位到出了問題的操作符

前面我們提到聚合查詢會使用管道操作符,而每一個操作符就會接受一連串的文檔,對這些文檔進行一些類型轉換,最後將轉換以後的文檔結果傳遞給下一個管道操作符來執行後續的操作,如果當前是最後一個管道操作符,那麼則會顯示給用戶最後的文檔數據。不同的管道操作符是可以按照順序組合在一起使用,並且可以被重復執行多次,例如我們可以先使用$match然後再去、 match操作。

match管道操作符可以使用$gt、$lt、$in等操作符,進行過濾,不過需要注意的是不能在$match管道操作符中使用空間地理操作符。

在實際使用的過程中,盡可能的將 match操作符以後,再去投射或者執行分組操作的話,是可以利用索引的。

相比較一般的查詢操作而言,使用管道操作,尤其是其中的投射操作更加強大。我們可以在查詢文檔結束以後利用 $project 操作符從文檔中進行欄位的提取,甚至於我們可以重命名欄位,將部分欄位映射成我們想要展示出去的欄位,也可以對一部分欄位進行一些有意義的處理。需要注意的是, $project 操作符可以傳入兩個參數,第一個是需要處理的屬性名稱,第二個則是0或者1,如果傳入1,則代表當前的屬性是需要顯示出來的,如果是0或者不寫,默認都是代表這個欄位不需要顯示出來

當然第二個參數也可以是一個表達式或者查詢條件,滿足當前表達式的數據也可以進行顯示,接下來我們先准備一點數據:

接下來,我們來查詢,條件是item欄位為abc,quantity要大於5,並且我們只要item和price欄位的結果,其他都排除掉:

可以看到結果為:

如果我們想要在原基礎上改變某個欄位的名稱,例如將item改為item_code,可以利用$來完成,如下:

可以看到我們指定的名稱item_code,而這個別名對應的欄位item使用$作為前綴標記,代表將item欄位映射為item_code,可以看到結果:

我們在投影的時候,除了可以將某個欄位映射成其他欄位以外,還可以針對某個欄位進行一些簡單的運算,最常見的就是 四則運算 ,即

加法( subtract )、乘法( divide )、求模( $mod ) ,

除此之外,還支持對欄位進行 關系運算 (大小比較( " eq" )、大於( " gte" )、小於( " lte" )、不等於( " ifNull" ) )、

邏輯運算 (與( " or" )、非 ( " concat" )、截取( " toLower" ) )等

我們基於上面的需求,假設每一個價格是按照元為單位,現在要求輸出W為單位,那麼我們就需要對price進行除法運算,如下:

除此之外,我們也可以將計算完畢的price改名為priceW,即:

可以看到輸出的結果為:

這時有一個需求,要求我們返回數據的同時還要yyyy-MM-dd格式的時間字元串,這個時候我們就需要對date欄位進行時間函數和字元串混合處理了,如下:

這里需要注意的一點是, year:" substr函數將date欄位的結果截取成字元串即可實現拼接

group的_id上,代表按照當前欄位進行分組,例如,我們這里根據item進行分組:

在我們針對某個欄位進行分組以後,我們可以針對每個分組進行一些操作符的使用,常見的例如: $sum 、 $avg 、 $min 、 $max 、 $first 、 $last 。

$avg 操作符用來返回每一個分組內的平均值

現在我們基於前面item的分組,我們想要算出來每個組內的平均價格是多少,如下:

$min 和 $max 操作符用於返回分組內最大的值和最小的值

除了平均值以外,我們現在將最貴的和最便宜的價格也要列出來,這個時候就可以使用這兩個操作符了,如下:

$first 、 $last 則是可以獲取當前分組中第一個或者最後一個的某個欄位的結果,如下:

除此之外,我們還可以在分組的時候使用數組操作符,例如 $addToSet 可以判斷,當前數組如果不包含某個條件,就添加到當前數組中, $push 則不管元素是否存在,都直接添加到數組中

注意:大部分管道操作符都是流式處理的,只要有新的文檔進入,就可以對新的文檔進行處理,但是 $group 代表必須收到全部文檔以後才可以進行分組操作,才會將結果傳遞給後續的管道操作符,這就意味著,如果當前mongo是存在分片的,會先在每個分片上執行完畢以後,再把結果傳遞mongos進行統一的分組,剩下的管道操作符也不會在每個分片,而是mongos上執行了

如果我們現在遇到一些文檔比較復雜,比如存在內嵌文檔的存在,某個屬性裡面嵌套了一個數組,但是我們需要對內嵌的數組文檔進行分析過濾等查詢處理,這個時候就可以使用 $unwind 操作符將每一個文檔中的嵌套數組文件拆分為一個個獨立的文檔便於進行後續的處理,例如我們需要將之前的set集合中關於請求的url以及ip的信息拆分出來,原始的格式如下:

我們可以使用命令進行拆分,如下:

結果為:

可以看到數據則是按照每一條信息的方式展示出來了,方便後續的計算以及輸出,但是需要注意的一點是,這種方式,如果該文檔中沒有拆分的欄位,或者是空數組,默認會直接排除,如果我們需要空數組等也輸出計算出來,則可以指定 preserveNullAndEmptyArrays 參數,設置為true,則代表空數組或者不存在的文檔也要拆分輸出出來,即:

我們可以在管道查詢的過程中,按照某個屬性值或者多個屬性的結果進行順序排序,排序的方式與普通查詢操作符中的sort操作符表現一致,與其他管道操作符一樣,可以在任何階段使用,但是,需要注意的一點是,建議在管道操作符第一階段進行排序,因為此時的排序是可以觸發索引的,如果在後續階段進行排序,會消耗大量內存,並且耗時會很久,尤其是在有 $group 的情況下,如果放在 $group 操作符後面,會發現等到的時間很久,不僅僅是無法觸發索引的問題,還和 $group 操作符是等待所有數據完畢才會觸發的特性有關,因此需要格外注意。

結果如下,按照我們想要的結果進行了排序:

limit,只返回前兩條數據,如下:

結果如下:

除了 skip,與之前的查詢操作符作用也是一樣的,用於在已經查詢完畢的結果集中跳過前N條數據以後進行返回,我們將$skip加在剛剛的查詢後面,如下:

這個時候可以看到返回的結果為空,什麼結果都沒有了,這是因為前一步管道已經限制了僅僅返回2條,而接著我們又跳過了前兩條文檔,因此返回的結果為空,我們將順序調換一下,看看:

可以看到結果如下,與剛才的結果無異:

管道查詢操作符有很多,除了上面學習的常用的部分,還有幾十個,需要了解全部的可以參考官網:

https://docs.mongodb.com/manual/reference/command/aggregate/

除此之外,我們在學習的過程中了解到,部分查詢操作符是可以觸發索引的,例如 $project 、 $group 或者 $unwind 操作符,因此我們也建議 如果可以的話,盡量先使用這類管道操作符進行數據過濾,可以有效減少數據集大小和數量,而且管道如果不是直接從原先的集合中使用數據,那就無
法在篩選和排序中使用索引 ,例如我們先進行管道操作,再去將過濾好的數據進行 $sort 排序,會導致無法使用索引,效率大幅度下降,因此如果我們需要涉及到 $sort 操作的時候,如果可以盡可能在最開始就處理,這個時候可以使用索引,效率較高,然後再去進行管道查詢篩選與分組等其他操作,可以有效的提高查詢的效率。另外需要注意的一點是,在 MongoDB中會對每一個管道查詢做限制,例如某一步管道查詢操作導致內存佔用超過20%,這個時候就會報錯,無法繼續使用管道 ,因為mongoDB本身每次最大是16Mb的數據量,為了盡可能避免或者減少這種問題,建議可以考慮盡可能的使用 $match 操作符過濾無用數據,減少數據總大小。同時也 因為管道查詢是多步執行,例如 $group 則是等待所有數據完畢才會執行,因此可能會導致整體執行時間較久 ,也因為這樣,才不建議在較高的實時查詢需求上使用管道和查詢,而是在 設計的時候盡可能直接使用查詢操作符進行數據查詢,觸發更多的索引,更快的銷量查詢出來想要的結果。

㈣ 如何在Java中對MongoDB按日期進行查詢統計

方法一:通過構造BasicDBObject對象來進行查詢
[java] view plain
int startYear=2015,endYear=2016;
int startMonth=12,endMonth=1;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject("applydate", new BasicDBObject("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).append("$lt", new Date(endYear - 1900, endMonth -1, endDay)));//因為無法確知當前月有多少天,所以就從當月的1號(包含)計到下月1號(不包含)
int iCount = cltApplies.find(query).count();
System.out.println(iCount);

經測試上述代碼執行完畢後iCount為9。也就是在2016-1-1至2016-1-31期間有9條記錄。
方法二:通過BasicDBObjectBuilder對象來查詢:
[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
int iCount = cltApplies.find(query).count();
System.out.println(iCount);

上述代碼執行後iCount同樣為9。

注意:因為java.util.Date(year,month,day)這個構造函數中year是超出1900的年數,所以需要減去1900;month從0開始,所以需要減去1。這個問題容易被初學者忽視。

下面擴展地說一下如果要進行帶日期過濾條件的統計,該如何做。

前面的東西都相同,只是在統計的時候需要調用集合的distinct方法。如統計某個欄位不重復的值有哪些,可用如下寫法:

[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
List<String> lstUserIds = cltApplies.distinct("userId", query);
System.out.println(lstUserIds.size());

上面這段代碼的執行結果為4。也就是在2016-1-1至2016-1-31之間出現了4個不同的userId。

㈤ 大數據分析方法解讀以及相關工具介紹

大數據分析方法解讀以及相關工具介紹
要知道,大數據已不再是數據大,最重要的現實就是對大數據進行分析,只有通過分析才能獲取很多智能的,深入的,有價值的信息。
越來越多的應用涉及到大數據,這些大數據的屬性,包括數量,速度,多樣性等等都是呈現了大數據不斷增長的復雜性,所以,大數據的分析方法在大數據領域就顯得尤為重要,可以說是決定最終信息是否有價值的決定性因素。基於此,大數據分析方法理論有哪些呢?
大數據分析的五個基本方面
(預測性分析能力)
數據挖掘可以讓分析員更好的理解數據,而預測性分析可以讓分析員根據可視化分析和數據挖掘的結果做出一些預測性的判斷。
(數據質量和數據管理)
數據質量和數據管理是一些管理方面的最佳實踐。通過標准化的流程和工具對數據進行處理可以保證一個預先定義好的高質量的分析結果。
AnalyticVisualizations(可視化分析)
不管是對數據分析專家還是普通用戶,數據可視化是數據分析工具最基本的要求。可視化可以直觀的展示數據,讓數據自己說話,讓觀眾聽到結果。
SemanticEngines(語義引擎)
我們知道由於非結構化數據的多樣性帶來了數據分析的新的挑戰,我們需要一系列的工具去解析,提取,分析數據。語義引擎需要被設計成能夠從「文檔」中智能提取信息。
DataMiningAlgorithms(數據挖掘演算法)
可視化是給人看的,數據挖掘就是給機器看的。集群、分割、孤立點分析還有其他的演算法讓我們深入數據內部,挖掘價值。這些演算法不僅要處理大數據的量,也要處理大數據的速度。
假如大數據真的是下一個重要的技術革新的話,我們最好把精力關注在大數據能給我們帶來的好處,而不僅僅是挑戰。
大數據處理
大數據處理數據時代理念的三大轉變:要全體不要抽樣,要效率不要絕對精確,要相關不要因果。具體的大數據處理方法其實有很多,但是根據長時間的實踐,筆者總結了一個基本的大數據處理流程,並且這個流程應該能夠對大家理順大數據的處理有所幫助。整個處理流程可以概括為四步,分別是採集、導入和預處理、統計和分析,以及挖掘。
採集
大數據的採集是指利用多個資料庫來接收發自客戶端的數據,並且用戶可以通過這些資料庫來進行簡單的查詢和處理工作。比如,電商會使用傳統的關系型資料庫MySQL和Oracle等來存儲每一筆事務數據,除此之外,Redis和MongoDB這樣的NoSQL資料庫也常用於數據的採集。
在大數據的採集過程中,其主要特點和挑戰是並發數高,因為同時有可能會有成千上萬的用戶來進行訪問和操作,比如火車票售票網站和淘寶,它們並發的訪問量在峰值時達到上百萬,所以需要在採集端部署大量資料庫才能支撐。並且如何在這些資料庫之間進行負載均衡和分片的確是需要深入的思考和設計。
統計/分析
統計與分析主要利用分布式資料庫,或者分布式計算集群來對存儲於其內的海量數據進行普通的分析和分類匯總等,以滿足大多數常見的分析需求,在這方面,一些實時性需求會用到EMC的GreenPlum、Oracle的Exadata,以及基於MySQL的列式存儲Infobright等,而一些批處理,或者基於半結構化數據的需求可以使用Hadoop。統計與分析這部分的主要特點和挑戰是分析涉及的數據量大,其對系統資源,特別是I/O會有極大的佔用。
導入/預處理
雖然採集端本身會有很多資料庫,但是如果要對這些海量數據進行有效的分析,還是應該將這些來自前端的數據導入到一個集中的大型分布式資料庫,或者分布式存儲集群,並且可以在導入基礎上做一些簡單的清洗和預處理工作。也有一些用戶會在導入時使用來自Twitter的Storm來對數據進行流式計算,來滿足部分業務的實時計算需求。導入與預處理過程的特點和挑戰主要是導入的數據量大,每秒鍾的導入量經常會達到百兆,甚至千兆級別。
挖掘
與前面統計和分析過程不同的是,數據挖掘一般沒有什麼預先設定好的主題,主要是在現有數據上面進行基於各種演算法的計算,從而起到預測的效果,從而實現一些高級別數據分析的需求。比較典型演算法有用於聚類的K-Means、用於統計學習的SVM和用於分類的Naive Bayes,主要使用的工具有Hadoop的Mahout等。該過程的特點和挑戰主要是用於挖掘的演算法很復雜,並且計算涉及的數據量和計算量都很大,還有,常用數據挖掘演算法都以單線程為主。
大數據分析工具詳解 IBM惠普微軟工具在列
去年,IBM宣布以17億美元收購數據分析公司Netezza;EMC繼收購數據倉庫軟體廠商Greenplum後再次收購集群NAS廠商Isilon;Teradata收購了Aster Data 公司;隨後,惠普收購實時分析平台Vertica等,這些收購事件指向的是同一個目標市場——大數據。是的,大數據時代已經來臨,大家都在摩拳擦掌,搶占市場先機。
而在這裡面,最耀眼的明星是hadoop,Hadoop已被公認為是新一代的大數據處理平台,EMC、IBM、Informatica、Microsoft以及Oracle都紛紛投入了Hadoop的懷抱。對於大數據來說,最重要的還是對於數據的分析,從裡面尋找有價值的數據幫助企業作出更好的商業決策。下面,我們就來看以下八大關於大數據分析的工具。
EMC Greenplum統一分析平台(UAP)
Greenplum在2010年被EMC收購了其EMC Greenplum統一分析平台(UAP)是一款單一軟體平台,數據團隊和分析團隊可以在該平台上無縫地共享信息、協作分析,沒必要在不同的孤島上工作,或者在不同的孤島之間轉移數據。正因為如此,UAP包括ECM Greenplum關系資料庫、EMC Greenplum HD Hadoop發行版和EMC Greenplum Chorus。
EMC為大數據開發的硬體是模塊化的EMC數據計算設備(DCA),它能夠在一個設備裡面運行並擴展Greenplum關系資料庫和Greenplum HD節點。DCA提供了一個共享的指揮中心(Command Center)界面,讓管理員可以監控、管理和配置Greenplum資料庫和Hadoop系統性能及容量。隨著Hadoop平台日趨成熟,預計分析功能會急劇增加。
IBM打組合拳提供BigInsights和BigCloud
幾年前,IBM開始在其實驗室嘗試使用Hadoop,但是它在去年將相關產品和服務納入到商業版IBM在去年5月推出了InfoSphere BigI雲版本的 InfoSphere BigInsights使組織內的任何用戶都可以做大數據分析。雲上的BigInsights軟體可以分析資料庫里的結構化數據和非結構化數據,使決策者能夠迅速將洞察轉化為行動。
IBM隨後又在10月通過其智慧雲企業(SmartCloud Enterprise)基礎架構,將BigInsights和BigSheets作為一項服務來提供。這項服務分基礎版和企業版;一大賣點就是客戶不必購買支持性硬體,也不需要IT專門知識,就可以學習和試用大數據處理和分析功能。據IBM聲稱,客戶用不了30分鍾就能搭建起Hadoop集群,並將數據轉移到集群裡面,數據處理費用是每個集群每小時60美分起價。

Informatica 9.1:將大數據的挑戰轉化為大機遇
Informatica公司在去年10月則更深入一步,當時它推出了HParser,這是一種針對Hadoop而優化的數據轉換環境。據Informatica聲稱,軟體支持靈活高效地處理Hadoop裡面的任何文件格式,為Hadoop開發人員提供了即開即用的解析功能,以便處理復雜而多樣的數據源,包括日誌、文檔、二進制數據或層次式數據,以及眾多行業標准格式(如銀行業的NACHA、支付業的SWIFT、金融數據業的FIX和保險業的ACORD)。正如資料庫內處理技術加快了各種分析方法,Informatica同樣將解析代碼添加到Hadoop裡面,以便充分利用所有這些處理功能,不久會添加其他的數據處理代碼。
Informatica HParser是Informatica B2B Data Exchange家族產品及Informatica平台的最新補充,旨在滿足從海量無結構數據中提取商業價值的日益增長的需求。去年, Informatica成功地推出了創新的Informatica 9.1 for Big Data,是全球第一個專門為大數據而構建的統一數據集成平台。

甲骨文大數據機——Oracle Big Data Appliance
甲骨文的Big Data Appliance集成系統包括Cloudera的Hadoop系統管理軟體和支持服務Apache Hadoop 和Cloudera Manager。甲骨文視Big Data Appliance為包括Exadata、Exalogic和 Exalytics In-Memory Machine的「建造系統」。Oracle大數據機(Oracle Big Data Appliance),是一個軟、硬體集成系統,在系統中融入了Cloudera的Distribution Including Apache Hadoop、Cloudera Manager和一個開源R。該大數據機採用Oracle Linux操作系統,並配備Oracle NoSQL資料庫社區版本和Oracle HotSpot Java虛擬機。Big Data Appliance為全架構產品,每個架構864GB存儲,216個CPU內核,648TBRAW存儲,每秒40GB的InifiniBand連接。Big Data Appliance售價45萬美元,每年硬軟體支持費用為12%。
甲骨文Big Data Appliance與EMC Data Computing Appliance匹敵,IBM也曾推出數據分析軟體平台InfoSphere BigInsights,微軟也宣布在2012年發布Hadoop架構的SQL Server 2012大型數據處理平台。
統計分析方法以及統計軟體詳細介紹
統計分析方法有哪幾種?下面我們將詳細闡述,並介紹一些常用的統計分析軟體。

一、指標對比分析法指標對比分析法
統計分析的八種方法一、指標對比分析法指標對比分析法,又稱比較分析法,是統計分析中最常用的方法。是通過有關的指標對比來反映事物數量上差異和變化的方法。有比較才能鑒別。單獨看一些指標,只能說明總體的某些數量特徵,得不出什麼結論性的認識;一經過比較,如與國外、外單位比,與歷史數據比,與計劃相比,就可以對規模大小、水平高低、速度快慢作出判斷和評價。
指標分析對比分析方法可分為靜態比較和動態比較分析。靜態比較是同一時間條件下不同總體指標比較,如不同部門、不同地區、不同國家的比較,也叫橫向比較;動態比較是同一總體條件不同時期指標數值的比較,也叫縱向比較。這兩種方法既可單獨使用,也可結合使用。進行對比分析時,可以單獨使用總量指標或相對指標或平均指標,也可將它們結合起來進行對比。比較的結果可用相對數,如百分數、倍數、系數等,也可用相差的絕對數和相關的百分點(每1%為一個百分點)來表示,即將對比的指標相減。
二、分組分析法指標對比分析法
分組分析法指標對比分析法對比,但組成統計總體的各單位具有多種特徵,這就使得在同一總體范圍內的各單位之間產生了許多差別,統計分析不僅要對總體數量特徵和數量關系進行分析,還要深入總體的內部進行分組分析。分組分析法就是根據統計分析的目的要求,把所研究的總體按照一個或者幾個標志劃分為若干個部分,加以整理,進行觀察、分析,以揭示其內在的聯系和規律性。
統計分組法的關鍵問題在於正確選擇分組標值和劃分各組界限。
三、時間數列及動態分析法
時間數列。是將同一指標在時間上變化和發展的一系列數值,按時間先後順序排列,就形成時間數列,又稱動態數列。它能反映社會經濟現象的發展變動情況,通過時間數列的編制和分析,可以找出動態變化規律,為預測未來的發展趨勢提供依據。時間數列可分為絕對數時間數列、相對數時間數列、平均數時間數列。
時間數列速度指標。根據絕對數時間數列可以計算的速度指標:有發展速度、增長速度、平均發展速度、平均增長速度。
動態分析法。在統計分析中,如果只有孤立的一個時期指標值,是很難作出判斷的。如果編制了時間數列,就可以進行動態分析,反映其發展水平和速度的變化規律。
進行動態分析,要注意數列中各個指標具有的可比性。總體范圍、指標計算方法、計算價格和計量單位,都應該前後一致。時間間隔一般也要一致,但也可以根據研究目的,採取不同的間隔期,如按歷史時期分。為了消除時間間隔期不同而產生的指標數值不可比,可採用年平均數和年平均發展速度來編制動態數列。此外在統計上,許多綜合指標是採用價值形態來反映實物總量,如國內生產總值、工業總產值、社會商品零售總額等計算不同年份的發展速度時,必須消除價格變動因素的影響,才能正確的反映實物量的變化。也就是說必須用可比價格(如用不變價或用價格指數調整)計算不同年份相同產品的價值,然後才能進行對比。
為了觀察我國經濟發展的波動軌跡,可將各年國內生產總值的發展速度編制時間數列,並據以繪製成曲線圖,令人得到直觀認識。
四、指數分析法
指數是指反映社會經濟現象變動情況的相對數。有廣義和狹義之分。根據指數所研究的范圍不同可以有個體指數、類指數與總指數之分。
指數的作用:一是可以綜合反映復雜的社會經濟現象的總體數量變動的方向和程度;二是可以分析某種社會經濟現象的總變動受各因素變動影響的程度,這是一種因素分析法。操作方法是:通過指數體系中的數量關系,假定其他因素不變,來觀察某一因素的變動對總變動的影響。
用指數進行因素分析。因素分析就是將研究對象分解為各個因素,把研究對象的總體看成是各因素變動共同的結果,通過對各個因素的分析,對研究對象總變動中各項因素的影響程度進行測定。因素分析按其所研究的對象的統計指標不同可分為對總量指標的變動的因素分析,對平均指標變動的因素分析。
五、平衡分析法
平衡分析是研究社會經濟現象數量變化對等關系的一種方法。它把對立統一的雙方按其構成要素一一排列起來,給人以整體的概念,以便於全局來觀察它們之間的平衡關系。平衡關系廣泛存在於經濟生活中,大至全國宏觀經濟運行,小至個人經濟收支。平衡種類繁多,如財政平衡表、勞動力平衡表、能源平衡表、國際收支平衡表、投入產出平衡表,等等。平衡分析的作用:一是從數量對等關繫上反映社會經濟現象的平衡狀況,分析各種比例關系相適應狀況;二是揭示不平衡的因素和發展潛力;三是利用平衡關系可以從各項已知指標中推算未知的個別指標。
六、綜合評價分析
社會經濟分析現象往往是錯綜復雜的,社會經濟運行狀況是多種因素綜合作用的結果,而且各個因素的變動方向和變動程度是不同的。如對宏觀經濟運行的評價,涉及生活、分配、流通、消費各個方面;對企業經濟效益的評價,涉及人、財、物合理利用和市場銷售狀況。如果只用單一指標,就難以作出恰當的評價。
進行綜合評價包括四個步驟:
1.確定評價指標體系,這是綜合評價的基礎和依據。要注意指標體系的全面性和系統性。
2.搜集數據,並對不同計量單位的指標數值進行同度量處理。可採用相對化處理、函數化處理、標准化處理等方法。
3.確定各指標的權數,以保證評價的科學性。根據各個指標所處的地位和對總體影響程度不同,需要對不同指標賦予不同的權數。
4.對指標進行匯總,計算綜合分值,並據此作出綜合評價。
七、景氣分析
經濟波動是客觀存在的,是任何國家都難以完全避免的。如何避免大的經濟波動,保持經濟的穩定發展,一直是各國政府和經濟之專家在宏觀調控和決策中面臨的重要課題,景氣分析正是適應這一要求而產生和發展的。景氣分析是一種綜合評價分析,可分為宏觀經濟景氣分析和企業景氣調查分析。
宏觀經濟景氣分析。是國家統計局20世紀80年代後期開始著手建立監測指標體系和評價方法,經過十多年時間和不斷完善,已形成制度,定期提供景氣分析報告,對宏觀經濟運行狀態起到晴雨表和報警器的作用,便於國務院和有關部門及時採取宏觀調控措施。以經常性的小調整,防止經濟的大起大落。
企業景氣調查分析。是全國的大中型各類企業中,採取抽樣調查的方法,通過問卷的形式,讓企業負責人回答有關情況判斷和預期。內容分為兩類:一是對宏觀經濟總體的判斷和預期;一是對企業經營狀況的判斷和預期,如產品訂單、原材料購進、價格、存貨、就業、市場需求、固定資產投資等。
八、預測分析
宏觀經濟決策和微觀經濟決策,不僅需要了解經濟運行中已經發生了的實際情況,而且更需要預見未來將發生的情況。根據已知的過去和現在推測未來,就是預測分析。
統計預測屬於定量預測,是以數據分析為主,在預測中結合定性分析。統計預測的方法大致可分為兩類:一類是主要根據指標時間數列自身變化與時間的依存關系進行預測,屬於時間數列分析;另一類是根據指標之間相互影響的因果關系進行預測,屬於回歸分析。
預測分析的方法有回歸分析法、滑動平均法、指數平滑法、周期(季節)變化分析和隨機變化分析等。比較復雜的預測分析需要建立計量經濟模型,求解模型中的參數又有許多方法。

㈥ 求解決,使用Spring-data-mongodb寫出根據日期時間(按日、周、月、年)進行分組統計數據量,急~在線等

最近在做mongoDB的統計, 有需求是

按照一天24小時分組,

按照一周的7天分組,

按照一個月30天分組,

按照一年12個月分組統計,

mongodb 入庫的時間欄位是 2016-12-12 這樣的字元串格式,並沒有用mongodb的格式UTC,有時差問題.

思路是,只能通過mongodb的 管道 進行層層篩選, 分組的時候使用mongodb的自帶函數,$substr 進行截取進行分組.

db.advPlaysDetails.aggregate([
{
$match: {advId:"1"}
},
{
$match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31" }}
},
{
$project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,}

},
{
$group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}}

}

])
$substr 第一個參數 要切割的欄位, 第二個參數:從第幾個欄位開始切, 第三個欄位:切幾個.

至於統計出來, 比如,一周里,可能有一兩天根本就沒有數據這種情況,可以實現弄一個7天的集合或者數組,里邊數據默認為0 或其他初始值. 至於一個月多少天,不能定死30,應該用Calendar自己去算

閱讀全文

與mongodb大數據量統計相關的資料

熱點內容
松下微單電腦傳文件軟體 瀏覽:574
蘋果藍牙鍵盤surface 瀏覽:170
mindmaplinux 瀏覽:733
oppo手機怎麼連接電腦傳輸數據 瀏覽:624
word刪除章節附註分隔符 瀏覽:773
公告質疑需要哪些文件 瀏覽:608
資料庫模型是干什麼的 瀏覽:404
win10的驅動怎麼安裝驅動 瀏覽:320
word文件水印怎麼取消 瀏覽:443
rhel6的鏡像文件在哪裡下載 瀏覽:571
成功正能量微信頭像 瀏覽:848
wps表格如何恢復數據 瀏覽:264
linuxc靜態庫創建 瀏覽:838
u盤有微信文件但微信恢復不了 瀏覽:585
蘋果的網站數據是什麼 瀏覽:22
ps滾字教程 瀏覽:237
win7網路鄰居如何保存ftp 瀏覽:186
安卓客戶端代理伺服器 瀏覽:572
編程用蘋果 瀏覽:659
51虛擬機的文件管理在哪裡 瀏覽:13

友情鏈接