當前位置:首頁 » 服務存儲 » 數據分類存儲平台的製作
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

數據分類存儲平台的製作

發布時間: 2022-09-23 23:49:34

『壹』 請問我已經有一個平台在記錄信息,能不能建多一個資料庫導入平台裡面的信息並且分類儲存,需要多少錢

一般現在主流的電子商務網站都比較支持 不知道你現在 確定了的是哪一個!
有了程序的支持外 那麼你需要做的就是製作cvs 然後通過數據導入!cvs 裡面跟EXSL 差不多 都是需要根據一定製定的數據進行添加 然後再統一導入
如果你不是太清楚具體怎麼添加到CVS 文件裡面 有個簡單的辦法
那就是你可以先手動在後台添加 幾條數據然後在導出成cvs 文件 然後你打開 根據樣式進行添加修改即可!

『貳』 如何搭建私有雲存儲

虛擬化技術在企業私有雲IT基礎架構中仍然占據重要地位,同時,為了進一步提升應用效率,越來越多的生產環境也正在逐步變革,從以虛擬機為中心的架構向以容器和微服務為中心的雲原生架構過渡,在這個過程中,存儲如何有效支撐各種雲主機應用與微服務應用,對於企業的私有雲數據中心提出了新的挑戰。

企業面臨的問題

存儲設施七國八制,硬體鎖定缺少彈性

多種雲平台對於存儲的要求各不相同,塊/文件/對象存儲對應不同類型的應用,對外提供不同的服務介面,一種存儲設備無法滿足多種類型的雲平台存儲需求,而且傳統存儲在擴展性方面不能滿足雲時代大規模雲平台對存儲在線彈性擴容的需求,在可維護性方面則面臨硬體架構綁定、運維復雜、難以維保等問題,而且這些問題會隨著存儲設備種類和數量的增多進一步放大。

業務調度變更頻繁,資源不能共享

隨著開發測試虛擬機以及容器、微服務平台在企業私有雲平台的上線,大型企業的應用快速迭代、頻繁發布對存儲系統的支撐提出了嚴峻挑戰,不同業務的數據保存在不同廠商的存儲設備中,數據流動性差,不僅導致存儲空間及性能資源浪費嚴重,數據災備方案也很難統一化。

開源產品難以維護,不能實現企業級產品化

基於開源虛擬化技術的雲平台如OpenStack為眾多客戶提供了快速構建私有雲基礎設施的能力,但是存儲部分卻不一樣,開源的存儲系統如Ceph雖然可以小規模部署試用, 但在大規模商用時會遇到很多問題:與硬體和企業級應用生態融合程度不高,嚴重依賴人工開發運維,在性能和服務質量方面不能滿足核心業務的需求

杉岩私有雲存儲解決方案

杉岩私有雲存儲解決方案充分發揮了杉岩統一存儲平台(USP)的雲適配、開放等優勢,支持各種復雜的應用負載,可靈活支撐私有雲的虛擬化平台,如VMware、Citrix、OpenStack等虛擬化和雲平台,以及通過Kubernetes軟體一致性認證的所有容器雲平台,如:Rancher、Openshift、Kubernetes等。

通過杉岩統一存儲平台,用戶可快速構建能夠兼容所有主流虛擬化平台與容器微服務平台的統一存儲資源池,面對各種虛擬機和微服務需求,池化的存儲平台為大規模雲環境提供了可靠的存儲基礎架構支撐,幫助用戶從紛繁復雜的基礎架構運維工作中解放出來,更關注於私有雲上運行的業務本身。

客戶價值

資源整合,鏈接企業信息孤島

單資源池提供塊、文件、對象多種存儲服務,支持虛擬化平台和資料庫應用;強大的存儲資源生命周期管理能力,跨雲平台在線遷移數據,實現數據共享和提高資源利用率;存儲卷QoS等級和性能優先順序在線調整,可根據企業資源和業務需求合理配置資源。

開放兼容,適配多種私有雲平台

通過VMware VAAI和Citrix Ready認證,針對主流虛擬化平台優化I/O性能,大幅提升虛擬機訪問的性能。通過OpenStack Cinder認證,可提供塊和對象存儲基礎架構支撐支持容器平台CSI介面認證,為Kubernetes生態的容器應用提供塊和文件存儲服務。

智能管理,解決規模化運維難題

向導式安裝部署和自助擴容配置,極大提升易用性和可維護性,管理自動化降低運維成本;針對大規模集群優化的可靠性管理,檢測和修復硬碟軟錯誤的專利技術,節約用戶硬體投資。存儲視角的管理功能,可視化展示主機、容器與存儲的映射關系和性能監控協助管理員快速定位和解決問題。

『叄』 如何才能實現對一個資料庫中的數據表進行分類存儲以方便查詢

一般我們會把所有的建築物群放到一個表中,用主鍵區會每個建築物群,用外鍵區分每個建築物,還可以用侯選鍵區會樓層和房間。

『肆』 如何搭建大數據分析平台

本人為大數據技術員,可以分享一些心得體驗給題主:
其實題主需要搞清楚以下幾個問題,搞清楚了,其實問題的答案也就有了:
1、是從個人學習成長的角度想搭建平台自學?還是現在的公司需要大數據技術進行分析?——如果是從個人學習成長的角度,建議直接按照Hadoop或者Spark的官網教程安裝即可,建議看官網(英文),在大數據技術領域,英語的掌握是非常重要的,因為涉及到組件選型、日後的安裝、部署、運維,所有的任務運行信息、報錯信息都是英文的,包括遇到問題的解答,所以還是非常重要的。如果是公司需要進行大數據分析,那麼還要研究以下幾個問題:為什麼需要搭建大數據分析平台?要解決什麼業務問題?需要什麼樣的分析?數據量有多少?是否有實時分析的需求?是否有BI報表的需求?——這里舉一個典型的場景:公司之前採用Oracle或Mysql搭建的業務資料庫,而且有簡單的數據分析,或者可能采購了BI系統,就是直接用業務系統資料庫進行支持的,現在隨著數據量越來越大,那麼就需要採用大數據技術進行擴容。
搞清楚需求之後,按照以下的步驟進行:
1、整體方案設計;整體方案設計時需要考慮的因素:數據量有多少:幾百GB?幾十TB?數據存儲在哪裡:存儲在MySQL中?Oracle中?或其他資料庫中?數據如何從現在的存儲系統進入到大數據平台中?如何將結果數據寫出到其他存儲系統中?分析主題是什麼:只有幾個簡單指標?還是說有很多統計指標,需要專門的人員去梳理,分組,並進行產品設計;是否需要搭建整體數倉?是否需要BI報表:業務人員有無操作BI的能力,或團隊組成比較簡單,不需要前後端人員投入,使用BI比較方便;是否需要實時計算?
2、組件選型;架構設計完成後就需要組件選型了,這時候最好是比較資深的架構師參與設計,選型包括:離線計算引擎:Hadoop、Spark、Tez……實時計算引擎:Storm、Flink、Samza、Spark Streaming……BI軟體:Tableau、QlikView、帆軟……
3、安裝部署;選型完成後,就可以進行安裝部署了,這部分其實是最簡單的,直接按照每個組件的部署要求安裝即可。
4、另一種選擇:採用商用軟體如果是企業需要搭建大數據平台,那麼還有一種選擇是直接採用商用的數據平台。市面上有很多成熟的商用大數據平台,Cloudera、星環、華為、亞信等等,都有對應的產品線,業內數據大咖袋鼠雲就有一款非常優秀的大數據平台產品:數棧。主要有以下幾個特點:
1.一站式。一站式數據開發產品體系,滿足企業建設數據中台過程中的多樣復雜需求。
2.兼容性強。支持對接多種計算引擎,使更多企業「半路上車」。
3.開箱即用。基於Web的圖形化操作界面,開箱即用,快速上手。
4.性價比高。滿足中小企業數據中台建設需求,降低企業投入成本。

『伍』 怎樣搭建平台

親身參與,作為主力完成了一個信息大數據分析平台。中間經歷了很多問題,算是有些經驗,因而作答。
整體而言,大數據平台從平台部署和數據分析過程可分為如下幾步:
1、linux系統安裝
一般使用開源版的Redhat系統--CentOS作為底層平台。為了提供穩定的硬體基礎,在給硬碟做RAID和掛載數據存儲節點的時,需要按情況配置。例如,可以選擇給HDFS的namenode做RAID2以提高其穩定性,將數據存儲與操作系統分別放置在不同硬碟上,以確保操作系統的正常運行。

2、分布式計算平台/組件安裝
目前國內外的分布式系統的大多使用的是Hadoop系列開源系統。Hadoop的核心是HDFS,一個分布式的文件系統。在其基礎上常用的組件有Yarn、Zookeeper、Hive、Hbase、Sqoop、Impala、ElasticSearch、Spark等。
先說下使用開源組件的優點:1)使用者眾多,很多bug可以在網上找的答案(這往往是開發中最耗時的地方)。2)開源組件一般免費,學習和維護相對方便。3)開源組件一般會持續更新,提供必要的更新服務『當然還需要手動做更新操作』。4)因為代碼開源,若出bug可自由對源碼作修改維護。
再簡略講講各組件的功能。分布式集群的資源管理器一般用Yarn,『全名是Yet Another Resource Negotiator』。常用的分布式數據數據『倉』庫有Hive、Hbase。Hive可以用SQL查詢『但效率略低』,Hbase可以快速『近實時』讀取行。外部資料庫導入導出需要用到Sqoop。Sqoop將數據從Oracle、MySQL等傳統資料庫導入Hive或Hbase。Zookeeper是提供數據同步服務,Yarn和Hbase需要它的支持。Impala是對hive的一個補充,可以實現高效的SQL查詢。ElasticSearch是一個分布式的搜索引擎。針對分析,目前最火的是Spark『此處忽略其他,如基礎的MapRece 和 Flink』。Spark在core上面有ML lib,Spark Streaming、Spark QL和GraphX等庫,可以滿足幾乎所有常見數據分析需求。
值得一提的是,上面提到的組件,如何將其有機結合起來,完成某個任務,不是一個簡單的工作,可能會非常耗時。

3、數據導入
前面提到,數據導入的工具是Sqoop。用它可以將數據從文件或者傳統資料庫導入到分布式平台『一般主要導入到Hive,也可將數據導入到Hbase』。

4、數據分析
數據分析一般包括兩個階段:數據預處理和數據建模分析。
數據預處理是為後面的建模分析做准備,主要工作時從海量數據中提取可用特徵,建立大寬表。這個過程可能會用到Hive SQL,Spark QL和Impala。
數據建模分析是針對預處理提取的特徵/數據建模,得到想要的結果。如前面所提到的,這一塊最好用的是Spark。常用的機器學習演算法,如樸素貝葉斯、邏輯回歸、決策樹、神經網路、TFIDF、協同過濾等,都已經在ML lib裡面,調用比較方便。

5、結果可視化及輸出API
可視化一般式對結果或部分原始數據做展示。一般有兩種情況,行數據展示,和列查找展示。在這里,要基於大數據平台做展示,會需要用到ElasticSearch和Hbase。Hbase提供快速『ms級別』的行查找。 ElasticSearch可以實現列索引,提供快速列查找。
平台搭建主要問題:
1、穩定性 Stability
理論上來說,穩定性是分布式系統最大的優勢,因為它可以通過多台機器做數據及程序運行備份以確保系統穩定。但也由於大數據平台部署於多台機器上,配置不合適,也可能成為最大的問題。 曾經遇到的一個問題是Hbase經常掛掉,主要原因是采購的硬碟質量較差。硬碟損壞有時會到導致Hbase同步出現問題,因而導致Hbase服務停止。由於硬碟質量較差,隔三差五會出現服務停止現象,耗費大量時間。結論:大數據平台相對於超算確實廉價,但是配置還是必須高於家用電腦的。

2、可擴展性 Scalability
如何快速擴展已有大數據平台,在其基礎上擴充新的機器是雲計算等領域應用的關鍵問題。在實際2B的應用中,有時需要增減機器來滿足新的需求。如何在保留原有功能的情況下,快速擴充平台是實際應用中的常見問題。

上述是自己項目實踐的總結。整個平台搭建過程耗時耗力,非一兩個人可以完成。一個小團隊要真正做到這些也需要耗費很長時間。

目前國內和國際上已有多家公司提供大數據平台搭建服務,國外有名的公司有Cloudera,Hortonworks,MapR等,國內也有華為、明略數據、星環等。另外有些公司如明略數據等還提供一體化的解決方案,尋求這些公司合作對 於入門級的大數據企業或沒有大數據分析能力的企業來說是最好的解決途徑。

對於一些本身體量較小或者目前數據量積累較少的公司,個人認為沒有必要搭建這一套系統,暫時先租用AWS和阿里雲就夠了。對於數據量大,但數據分析需求較簡單的公司,可以直接買Tableau,Splunk,HP Vertica,或者IBM DB2等軟體或服務即可。

以上是我從事大數據以來的一些認識。管見所及,可能有所疏漏,歡迎補充。

『陸』 我想建一個網頁式word文檔資料庫存儲系統,怎麼製作

asp-mysql就可以
Mysql是免費的。

『柒』 如何實現企業數據 大數據平台 分布式存放

Hadoop在可伸縮性、健壯性、計算性能和成本上具有無可替代的優勢,事實上已成為當前互聯網企業主流的大數據分析平台。本文主要介紹一種基於Hadoop平台的多維分析和數據挖掘平台架構。作為一家互聯網數據分析公司,我們在海量數據的分析領域那真是被「逼上樑山」。多年來在嚴苛的業務需求和數據壓力下,我們幾乎嘗試了所有可能的大數據分析方法,最終落地於Hadoop平台之上。
1. 大數據分析大分類
Hadoop平台對業務的針對性較強,為了讓你明確它是否符合你的業務,現粗略地從幾個角度將大數據分析的業務需求分類,針對不同的具體需求,應採用不同的數據分析架構。
按照數據分析的實時性,分為實時數據分析和離線數據分析兩種。
實時數據分析一般用於金融、移動和互聯網B2C等產品,往往要求在數秒內返回上億行數據的分析,從而達到不影響用戶體驗的目的。要滿足這樣的需求,可以採用精心設計的傳統關系型資料庫組成並行處理集群,或者採用一些內存計算平台,或者採用HDD的架構,這些無疑都需要比較高的軟硬體成本。目前比較新的海量數據實時分析工具有EMC的Greenplum、SAP的HANA等。
對於大多數反饋時間要求不是那麼嚴苛的應用,比如離線統計分析、機器學習、搜索引擎的反向索引計算、推薦引擎的計算等,應採用離線分析的方式,通過數據採集工具將日誌數據導入專用的分析平台。但面對海量數據,傳統的ETL工具往往徹底失效,主要原因是數據格式轉換的開銷太大,在性能上無法滿足海量數據的採集需求。互聯網企業的海量數據採集工具,有Facebook開源的Scribe、LinkedIn開源的Kafka、淘寶開源的Timetunnel、Hadoop的Chukwa等,均可以滿足每秒數百MB的日誌數據採集和傳輸需求,並將這些數據上載到Hadoop中央系統上。
按照大數據的數據量,分為內存級別、BI級別、海量級別三種。
這里的內存級別指的是數據量不超過集群的內存最大值。不要小看今天內存的容量,Facebook緩存在內存的Memcached中的數據高達320TB,而目前的PC伺服器,內存也可以超過百GB。因此可以採用一些內存資料庫,將熱點數據常駐內存之中,從而取得非常快速的分析能力,非常適合實時分析業務。圖1是一種實際可行的MongoDB分析架構。

圖1 用於實時分析的MongoDB架構
MongoDB大集群目前存在一些穩定性問題,會發生周期性的寫堵塞和主從同步失效,但仍不失為一種潛力十足的可以用於高速數據分析的NoSQL。
此外,目前大多數服務廠商都已經推出了帶4GB以上SSD的解決方案,利用內存+SSD,也可以輕易達到內存分析的性能。隨著SSD的發展,內存數據分析必然能得到更加廣泛的應用。
BI級別指的是那些對於內存來說太大的數據量,但一般可以將其放入傳統的BI產品和專門設計的BI資料庫之中進行分析。目前主流的BI產品都有支持TB級以上的數據分析方案。種類繁多,就不具體列舉了。
海量級別指的是對於資料庫和BI產品已經完全失效或者成本過高的數據量。海量數據級別的優秀企業級產品也有很多,但基於軟硬體的成本原因,目前大多數互聯網企業採用Hadoop的HDFS分布式文件系統來存儲數據,並使用MapRece進行分析。本文稍後將主要介紹Hadoop上基於MapRece的一個多維數據分析平台。
數據分析的演算法復雜度
根據不同的業務需求,數據分析的演算法也差異巨大,而數據分析的演算法復雜度和架構是緊密關聯的。舉個例子,Redis是一個性能非常高的內存Key-Value NoSQL,它支持List和Set、SortedSet等簡單集合,如果你的數據分析需求簡單地通過排序,鏈表就可以解決,同時總的數據量不大於內存(准確地說是內存加上虛擬內存再除以2),那麼無疑使用Redis會達到非常驚人的分析性能。
還有很多易並行問題(Embarrassingly Parallel),計算可以分解成完全獨立的部分,或者很簡單地就能改造出分布式演算法,比如大規模臉部識別、圖形渲染等,這樣的問題自然是使用並行處理集群比較適合。
而大多數統計分析,機器學習問題可以用MapRece演算法改寫。MapRece目前最擅長的計算領域有流量統計、推薦引擎、趨勢分析、用戶行為分析、數據挖掘分類器、分布式索引等。
2. 面對大數據OLAP大一些問題

OLAP分析需要進行大量的數據分組和表間關聯,而這些顯然不是NoSQL和傳統資料庫的強項,往往必須使用特定的針對BI優化的資料庫。比如絕大多數針對BI優化的資料庫採用了列存儲或混合存儲、壓縮、延遲載入、對存儲數據塊的預統計、分片索引等技術。

Hadoop平台上的OLAP分析,同樣存在這個問題,Facebook針對Hive開發的RCFile數據格式,就是採用了上述的一些優化技術,從而達到了較好的數據分析性能。如圖2所示。
然而,對於Hadoop平台來說,單單通過使用Hive模仿出SQL,對於數據分析來說遠遠不夠,首先Hive雖然將HiveQL翻譯MapRece的時候進行了優化,但依然效率低下。多維分析時依然要做事實表和維度表的關聯,維度一多性能必然大幅下降。其次,RCFile的行列混合存儲模式,事實上限制死了數據格式,也就是說數據格式是針對特定分析預先設計好的,一旦分析的業務模型有所改動,海量數據轉換格式的代價是極其巨大的。最後,HiveQL對OLAP業務分析人員依然是非常不友善的,維度和度量才是直接針對業務人員的分析語言。
而且目前OLAP存在的最大問題是:業務靈活多變,必然導致業務模型隨之經常發生變化,而業務維度和度量一旦發生變化,技術人員需要把整個Cube(多維立方體)重新定義並重新生成,業務人員只能在此Cube上進行多維分析,這樣就限制了業務人員快速改變問題分析的角度,從而使所謂的BI系統成為死板的日常報表系統。
使用Hadoop進行多維分析,首先能解決上述維度難以改變的問題,利用Hadoop中數據非結構化的特徵,採集來的數據本身就是包含大量冗餘信息的。同時也可以將大量冗餘的維度信息整合到事實表中,這樣可以在冗餘維度下靈活地改變問題分析的角度。其次利用Hadoop MapRece強大的並行化處理能力,無論OLAP分析中的維度增加多少,開銷並不顯著增長。換言之,Hadoop可以支持一個巨大無比的Cube,包含了無數你想到或者想不到的維度,而且每次多維分析,都可以支持成千上百個維度,並不會顯著影響分析的性能。


而且目前OLAP存在的最大問題是:業務靈活多變,必然導致業務模型隨之經常發生變化,而業務維度和度量一旦發生變化,技術人員需要把整個Cube(多維立方體)重新定義並重新生成,業務人員只能在此Cube上進行多維分析,這樣就限制了業務人員快速改變問題分析的角度,從而使所謂的BI系統成為死板的日常報表系統。
3. 一種Hadoop多維分析平台的架構
整個架構由四大部分組成:數據採集模塊、數據冗餘模塊、維度定義模塊、並行分 析模塊。

數據採集模塊採用了Cloudera的Flume,將海量的小日誌文件進行高速傳輸和合並,並能夠確保數據的傳輸安全性。單個collector宕機之後,數據也不會丟失,並能將agent數據自動轉移到其他的colllecter處理,不會影響整個採集系統的運行。如圖5所示。

數據冗餘模塊不是必須的,但如果日誌數據中沒有足夠的維度信息,或者需要比較頻繁地增加維度,則需要定義數據冗餘模塊。通過冗餘維度定義器定義需要冗餘的維度信息和來源(資料庫、文件、內存等),並指定擴展方式,將信息寫入數據日誌中。在海量數據下,數據冗餘模塊往往成為整個系統的瓶頸,建議使用一些比較快的內存NoSQL來冗餘原始數據,並採用盡可能多的節點進行並行冗餘;或者也完全可以在Hadoop中執行批量Map,進行數據格式的轉化。

維度定義模塊是面向業務用戶的前端模塊,用戶通過可視化的定義器從數據日誌中定義維度和度量,並能自動生成一種多維分析語言,同時可以使用可視化的分析器通過GUI執行剛剛定義好的多維分析命令。
並行分析模塊接受用戶提交的多維分析命令,並將通過核心模塊將該命令解析為Map-Rece,提交給Hadoop集群之後,生成報表供報表中心展示。
核心模塊是將多維分析語言轉化為MapRece的解析器,讀取用戶定義的維度和度量,將用戶的多維分析命令翻譯成MapRece程序。核心模塊的具體邏輯如圖6所示。

圖6中根據JobConf參數進行Map和Rece類的拼裝並不復雜,難點是很多實際問題很難通過一個MapRece Job解決,必須通過多個MapRece Job組成工作流(WorkFlow),這里是最需要根據業務進行定製的部分。圖7是一個簡單的MapRece工作流的例子。

MapRece的輸出一般是統計分析的結果,數據量相較於輸入的海量數據會小很多,這樣就可以導入傳統的數據報表產品中進行展現。

『捌』 資料庫中數據的分類存儲用哪種方式比較好

要求精度高就用decimal審題錯了簡單寫下區別:float:浮點型,含位元組數為4,32bit,數值范圍為-3.4E38~3.4E38(7個有效位)double:雙精度實型,含位元組數為8,64bit數值范圍-1.7E308~1.7E308(15個有效位)decimal:數字型,128bit,不存在精度損失,常用於銀行帳目計算。(28個有效位)numberic===decimalfloatf=345.98756f;//結果顯示為345.9876,只顯示7個有效位,對最後一位數四捨五入。doubled=345.975423578631442d;//結果顯示為345.975423578631,只顯示15個有效位,對最後一位四捨五入。註:float和double的相乘操作,數字溢出不會報錯,會有精度的損失。decimaldd=345.545454879..//可以支持28位,對最後一位四捨五入。註:當對decimal類型進行操作時,數值會因溢出而報錯。

『玖』 怎麼搭建大數據分析平台

數據分析平台就是將公司所有的數據進行進行收集整理,包括系統數據、業務數據等,在統一的數據框架下實現對數據的挖掘和分析,最後通過可視化的手段進行數據展示。

1、通常來說,企業內部的運營和業務系統每天會積累下大量歷史數據,一些企業最多是對一些零散的數據進行淺層次的分析,真正的海量數據其實並沒有得到真正有效的分析利用。

2、同時,隨著系統的不斷增加和積累,沉澱在系統深處的數據也更加難以提取和整合,後期的報表展示和可視化分析也就成了空殼應用。

3、一方面它可以匯通企業的各個業務系統,從源頭打通數據資源,另一方面也可以實現從數據提取、集成到數據清洗、加工、可視化的一站式分析,幫助企業真正從數據中提取價值,提高企業的經營能力。

搭建大數據分析平台可以到思邁特軟體Smartbi了解一下,它在金融行業,全球財富500強的10家國內銀行中,有8家選用了思邁特軟體Smartbi;國內12家股份制銀行,已覆蓋8家;國內六大銀行,已簽約4家;國內排名前十的保險公司已經覆蓋6家;國內排名前十的證券公司已經覆蓋5家。

數據分析平台靠不靠譜,來試試Smartbi,思邁特軟體Smartbi經過多年持續自主研發,凝聚大量商業智能最佳實踐經驗,整合了各行業的數據分析和決策支持的功能需求。滿足最終用戶在企業級報表、數據可視化分析、自助探索分析、數據挖掘建模、AI智能分析等大數據分析需求。

思邁特軟體Smartbi個人用戶全功能模塊長期免費試用
馬上免費體驗:Smartbi一站式大數據分析平台

『拾』 簡述android平台提供了哪些數據存儲方法

數據存儲在開發中是使用最頻繁的,Android平台主要有5種實現數據存儲的方式。
第1種: 使用SharedPreferences存儲數據
SharedPreferences是Android平台上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常規的Long長 整形、Int整形、String字元串型的保存。
它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data/<包名>/shared_prefs目錄下。
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過Editor對象實現。
實現SharedPreferences存儲的步驟如下:
一、根據Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數據。
四、通過commit()方法提交數據。
SharedPreferences對象與SQLite資料庫相比,免去了創建資料庫,創建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數據類型,比如其無法進行條件查詢等。所以不論SharedPreferences的數據存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他數據存儲方式。
第2種: 內部文件存儲數據
關於文件存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/data/data/<包>/files/***.***。
openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符「/」 ,如果文件不存在,Android 會自動創建它。
創建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過點擊Eclipse菜單「Window」-「Show View」-「Other」,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。
openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入: openFileOutput(「itcast.txt」, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,資料庫都應該是私有的(位於/data/data//files),其他程序無法訪問。
除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。 對於私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE許可權。
Activity還提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用於獲取/data/data//cache目錄 getFilesDir()方法用於獲取/data/data//files目錄。
第3種: 外部文件存儲數據
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對於像視頻這樣的大文件,我們可以把它存放在SDCard。
SDCard是干什麼的?你可以把它看作是移動硬碟或U盤。 在模擬器中使用SDCard,你需要先創建一張SDCard卡(當然不是真的SDCard,只是鏡像文件)。
創建SDCard可以在Eclipse創建模擬器時隨同創建,也可以使用DOS命令進行創建,如下: 在Dos窗口中進入android SDK安裝路徑的tools目錄,輸入以下命令創建一張容量為2G的SDCard,文件後綴可以隨便取,建議使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請訪問SDCard的許可權。
在AndroidManifest.xml中加入訪問SDCard的許可權如下:
要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,並且可以進行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的許可權。
Environment.getExternalStorageState()方法用於獲取SDCard的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取SDCard的目錄,你也可以這樣寫:
第4種: SQLite資料庫存儲數據
SQLite是輕量級嵌入式資料庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQLite 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。
特點:
面向資源有限的設備,
沒有伺服器進程,
所有數據存放在同一文件中跨平台,
可自由復制。
SQLite 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQLite。
SQLite 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQLite 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQLite 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQLite 稱這為「弱類型」(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。
Android 集成了 SQLite 資料庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 資料庫。
對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQLite 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQLite 資料庫,Android 開發中,程序員需要學使用這些 API。
資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。
創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。
Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現三個方法:
1 構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
3 onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容:
update()方法有四個參數,分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字元串,這些字元串會替換 WHERE 條件中的「?」標記。
update() 根據條件,更新指定列的值,所以用 execSQL() 方法可以達到同樣的目的。 WHERE 條件和其參數和用過的其他 SQL APIs 類似。
delete() 方法的使用和 update() 類似,使用表名,可選的 WHERE 條件和相應的填充 WHERE 條件的字元串。 查詢資料庫 類似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQLite 資料庫檢索數據。
1 .使用 rawQuery() 直接調用 SELECT 語句; 使用 query() 方法構建一個查詢。
Raw Queries 正如 API 名字,rawQuery() 是最簡單的解決方法。通過這個方法你就可以調用 SQL SELECT 語句。
例如: Cursor c=db.rawQuery( 「SELECT name FROM sqlite_master WHERE type=』table』 AND name=』mytable』」, null);
在上面例子中,我們查詢 SQLite 系統表(sqlite_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法可以迭代查詢結果。 如果查詢是動態的,使用這個方法就會非常復雜。
例如,當你需要查詢的列在程序編譯的時候不能確定,這時候使用 query() 方法會方便很多。
Regular Queries query() 方法用 SELECT 語句段構建查詢。SELECT 語句內容作為 query() 方法的參數,比如:要查詢的表名,要獲取的欄位名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。 除了表名,其他參數可以是 null。所以,以前的代碼段可以可寫成:
String[] columns={「ID」, 」inventory」};
Java代碼
String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);
使用游標
不管你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 資料庫游標,
使用游標,你可以:
通過使用 getCount() 方法得到結果集中有多少記錄;
通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷所有記錄;
通過 getColumnNames() 得到欄位名;
通過 getColumnIndex() 轉換成欄位號;
通過 getString(),getInt() 等方法得到給定欄位當前記錄的值;
通過 requery() 方法重新執行查詢得到游標;
通過 close() 方法釋放游標資源;
在 Android 中使用 SQLite 資料庫管理工具 在其他資料庫上作開發,一般都使用工具來檢查和處理資料庫的內容,而不是僅僅使用資料庫的 API。
使用 Android 模擬器,有兩種可供選擇的方法來管理資料庫。
首先,模擬器綁定了 sqlite3 控制台程序,可以使用 adb shell 命令來調用他。只要你進入了模擬器的 shell,在資料庫的路徑執行 sqlite3 命令就可以了。
資料庫文件一般存放在: /data/data/your.app.package/databases/your-db-name 如果你喜歡使用更友好的工具,你可以把資料庫拷貝到你的開發機上,使用 SQLite-aware 客戶端來操作它。這樣的話,你在一個資料庫的拷貝上操作,如果你想要你的修改能反映到設備上,你需要把資料庫備份回去。
把資料庫從設備上考出來,你可以使用 adb pull 命令(或者在 IDE 上做相應操作)。
存儲一個修改過的資料庫到設備上,使用 adb push 命令。 一個最方便的 SQLite 客戶端是 FireFox SQLite Manager 擴展,它可以跨所有平台使用。
如果你想要開發 Android 應用程序,一定需要在 Android 上存儲數據,使用 SQLite 資料庫是一種非常好的選擇。
第五種: 網路存儲數據
前面介紹的幾種存儲都是將數據存儲在本地設備上,除此之外,還有一種存儲(獲取)數據的方式,通過網路來實現數據的存儲和獲取。

我們可以調用WebService返回的數據或是解析HTTP協議實現網路數據交互。