Ⅰ php常用緩存有哪些,說一下你了解到的緩存
一、數據緩存
這里所說的數據緩存是指資料庫查詢緩存,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
二、頁面緩存
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些緩存類通常有此功能)。
三、時間觸發緩存
檢查文件是否存在並且時間戳小於設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那麼就用緩存,否則更新緩存。
四、內容觸發緩存
當插入數據或更新數據時,強制更新緩存。
五、靜態緩存
這里所說的靜態緩存是指靜態化,直接生成HTML或XML等文本文件,有更新的時候重生成一次,適合於不太變化的頁面,這就不說了。
以上內容是代碼級的解決方案,我直接CP別的框架,也懶得改,內容都差不多,很容易就做到,而且會幾種方式一起用,但下面的內容是伺服器端的緩存方案,非代碼級的,要有多方的合作才能做到。
六、內存緩存
Memcached是高性能的,分布式的內存對象緩存系統,用於在動態應用中減少資料庫負載,提升訪問速度。
Ⅱ 什麼是cache資料庫
cache是一種後關系型資料庫,它提供三種方式訪問數據:對象訪問、sql訪問、直接對多維數據數組訪問。而且三種訪問方式能夠並發訪問同一數據。
昂楷Cache使用了多維數據引擎,使得對象數據從磁碟到內存的過程得以很快完成,而且讀寫磁碟相互關聯數據的數據非常快。多維數據模型的高效訪問使Cache非常適合經常更新少量數據的交易處理應用,因為Cache將數據組織成N維的數組,對於交易所需要的數據,可以很容易地搜索、加鎖和更新。應用和資料庫引擎不需要花費時間去訪問多個表,也不需要為搜索數據而鎖住相關的所有數據頁。由於其性能比傳統的oracle資料庫快了幾十倍,國內的醫療系統也越來越多的使用cache資料庫,如深圳南山醫院、北京婦幼醫院、秦皇島市第一人民醫院等。
Ⅲ 資料庫一般用什麼存儲
業務數據,包括用戶,訂單等數據,要求數據嚴格准確和一致
規模如果是在千萬級,或者不超過10億級,80%選用MySQL來存儲
規模如果再10億-萬億,目前HBASE為主
以上兩種是免費資料庫,但對於Oracle,DB2,SQL Server付費資料庫(巨貴),主要使用在銀行和電信,因為對數據一致性,准確性,容災備份要求更嚴格。
因為商業資料庫的昂貴,互聯網公司一般用不起,感興趣可以了解下10年前阿里發起的去IOE的故事,即去掉IBM,Oracle,EMC,代替以開源軟體再次開放的系統,開創新數據新時代。
日誌數據,包括用戶所有線上行為數據,瀏覽,搜索,點擊等,存儲在HDFS上
這類數據,相比訂單和支付數據,規模要成10倍-1000倍增長。比如,我瀏覽10個店鋪寶貝才轉化一個訂單數據。但該類數據,不會要求太多性能和苛刻的准確性,甚至可以容忍丟小部分日誌數據。這部分數據,會放到HDFS上來存儲。即一種分部式文件存儲系統,存儲成本很低,如果查詢的話,就可以直接使用hive等工具,寫SQL查詢。
當然,資料庫現在發展很迅猛,比如TiDB,非關系資料庫MongoDB,緩存Redis等。
Ⅳ 搜索引擎用哪種資料庫比較好
樓上的太張狂,別的都不行?
主要看樓主做什麼搜索,
一般的數據搜索mysql是最快的
數據量大的話就使用oracle
搜索文件的話(包括網頁)就用磁碟存儲數據,然後使用lucene.net(http://incubator.apache.org/lucene.net/)做搜索
Ⅳ 如何用Redis緩存改善資料庫查詢性能
因為Redis具有在數據存儲中快速讀寫數據的能力,所以它比關系型資料庫更具有性能優勢。但是,關鍵值數據存儲是簡單的;它們沒有一個類似於
SQL的查詢語言或者結構化的數據模型。相反,它們有一個把鍵值作為與數值相關的標識符來使用的簡單字典或哈希模式。管理員使用這些鍵來進行數值的存儲和
檢索。
鍵值存儲是簡單快速的,它可用於實現豐富數據模型和關系型資料庫查詢功能的良好匹配。但是,有時候還是使用鍵值與關系型資料庫的組合為好。此外,還有很多商業支持的鍵值資料庫,包括Redis、Riak和Areospike等。
為了運行一個優化熱門查詢性能的Redis緩存,首先應確定你希望緩存的查詢結果。其中,應重點關注最常用的和最耗時的查詢,然後確定應緩沖查詢中的數據。為簡便起見,緩存查詢返回的所有列值。
為鍵值定義一個命名約定;可以使用行主鍵和列名的組合來構造密鑰。例如,其主鍵ID為 198278的 產品描述可以『198278:descry』的鍵值進行存儲。確保你的命名規則是簡單和規則驅動的,以便於使用最少的代碼來實現鍵的程序化創建。
接下來,確定是運行Redis緩存作為自助管理服務還是運行亞馬遜的ElastiCache。運行用戶自己的Redis實例將賦予管理人員對緩存的完全控制權。而這一控制權意味著靈活性,例如當有超出容量的情況出現時,管理人員有使用現有保留實例的權力。
此外,當用戶想要把應用程序從一家雲計算供應商遷移至另一家時,他們會發現完整的管理控制許可權是非常有用的。
如果用戶選擇運行一個自助管理的Redis實例,可下載伺服器。Redis的客戶端支持30種以上編程語言——從Java和Python到Prolog和Smalltalk。
已經使用AWS環境的企業可能會想要使用ElastiCache。除了諸如託管打補丁這樣的優點之外,亞馬遜ElastiCache支持一系列高速
緩存優化的節點類型,具體包括從中型到2X的m3節點、從大型到8X的r3節點以及從微型到中型的t2節點。ElastiCache還支持一些上一代的節
點類型,例如選擇m1、m2、t1和c1節點。
ElastiCache還支持多個可用區。如果有一個節點發生故障,一個讀操作復制節點將取代故障節點。任何需要確保應用程序運行的DNS變更都是
自動完成的,同時會創建一個新的讀操作副本。ElastiCache允許基於單位時間使用率的按需定價模式,以及一年期或三年期預付費的節點使用條款。完
整定價清單可以在這里找到。
如果使用Redis緩存和亞馬遜ElastiCache,那麼就可以從AWS管理控制台啟動一個集群。除了設置Redis服務外,還需要修改應用程
序代碼以便於能夠使用緩存。一個常用的模式就是,檢查緩存中是否存在有一個鍵值,如果沒有就執行一個SQL查詢以檢索數據,然後將其存儲在緩存中。當緩沖
存滿時,可以配置Redis刪除舊數據,這樣就不需要用戶使用專門的代碼來處理緩存存滿的情況了。
Ⅵ 在windows下用哪些內存資料庫,類似redis的
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。在實際應用中內存資料庫主要是配合oracle或mysql等大型關系資料庫使用,關注性能。
作用類似於緩存,並不注重數據完整性和數據一致性。
基於鍵值型的內存資料庫比關系型更加易於使用,性能和可擴展性更好,因此在應用上比關系型的內存資料庫使用更多。
比較FastDB、Memcached和Redis主流內存資料庫的功能特性。
FastDB的特點包括如下方面:
1、FastDB不支持client-server架構因而所有使用FastDB的應用程序必須運行在同一主機上;
2、fastdb假定整個資料庫存在於RAM中,並且依據這個假定優化了查詢演算法和介面。
3、fastdb沒有資料庫緩沖管理開銷,不需要在資料庫文件和緩沖池之間傳輸數據。
4、整個fastdb的搜索演算法和結構是建立在假定所有的數據都存在於內存中的,因此數據換出的效率不會很高。
5、Fastdb支持事務、在線備份以及系統崩潰後的自動恢復。
6、fastdb是一個面向應用的資料庫,資料庫表通過應用程序的類信息來構造。
FastDB不能支持Java API介面,這使得在本應用下不適合使用FastDB。
Memcached
Memcached是一種基於Key-Value開源緩存伺服器系統,主要用做資料庫的數據高速緩沖,並不能完全稱為資料庫。
memcached的API使用三十二位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於 memcached通常只是當作緩存系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程序更新memcached內的資料。
memcached具有多種語言的客戶端開發包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
Redis
Redis是一個高性能的key-value資料庫。redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部分場合可以對關系資料庫起到很好的補充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客戶端。
Ⅶ 如何設計搜索引擎資料庫
一.需要設計一個搜索引擎資料庫用於存放一些文章的信息及關鍵字,一旦有文章更新則更新文章中的信息及關鍵欄位,搜索引擎在內存中完成所有的文章關鍵欄位搜索,並且在此期間不允許有其他的操作,比如說文章的更新等等。
在此列出兩個表:
Info Table
Document ID Key max 10-digit integer
Search ID max 10-digit integer
Symbol varchar(?) stock symbol
Country varchar(3)
PID varchar(?) performance ID
Sector Code max 5-digit integer
Ind Code max 10-digit integer instry code
Language varchar(2)
Report Year max 4-digit integer
Report Quarter max 1-digit integer
Call Date varchar(10) 「yyyy/mm/dd」
Editor ID 5-digit integer
Words Table:
WordID int identity
Word varchar(30) ?
TranscriptID int referenced TranscriptID from Info Table
二.Info Table:用於存放文章的基本信息,Words Table用於存放文章的關鍵欄位。
假定關鍵欄位如下: stock market quote price exchange,Mutual Fund, Hedge Fund, ETF Investment Research這些欄位將存儲在Words Table,並且有一個DocumentID與Info Table進行關聯。
1.Words Table中列可能非常多,過億後數據查詢性能將非常低,該如何設計。(SQL版本為標准版)
2.關鍵字如何存儲比較好,比如stock market quote price exchange是否需要進行拆分為單個的單詞來存儲,還是保存為短語比較好?另外,如果使用全文索引,性能如何?
3.搜索期間不允許其他的操作,使用何種鎖,事物級別更好?
Ⅷ 資料庫有哪些常用資料庫有哪些
1、目前關系型資料庫主要有MySQL、SQLServer、數蠶資料庫、Oracle資料庫。
2、MySQL:免費產品,中小企業使用廣泛。
3、SQLServer:微軟的商業化產品,微軟SQL語句兼容性好,商業化成熟度高。
4、數蠶資料庫:數蠶科技針對中小型企業的資料庫,c++介面特性良好,SQL特性較弱。
5、Oracle資料庫:商業化程度最高的關系資料庫,優良的性能和企業擴展能力。
6、非關系型資料庫主要有FastDB、Memcached和Redis等主流內存資料庫。一般應用於緩存等非關鍵數據存儲,其優點是數據查詢速度快,對下層編程介面良好。
Ⅸ java怎麼將資料庫的數據做緩存,方便查找。
你的數據非常大,那你寫入內存會不會比較占資源,為什麼不用非同步刷新,讓它顯示不部分再慢慢載入
Ⅹ Java資料庫,哪個更好用
我將推薦給你們10個最高效的Java資料庫
1、MongoDB——最受歡迎,跨平台,面向文檔的資料庫
MongoDB是一個基於分布式文件存儲的資料庫,使用C++語言編寫。旨在為Web應用提供可擴展的高性能數據存儲解決方案。應用性能高低依賴於資料庫性能,MongoDB則是非關系資料庫中功能最豐富,最像關系資料庫的,隨著MongDB 3.4版本發布,其應用場景適用能力得到了進一步拓展。
MongoDB的核心優勢就是靈活的文檔模型、高可用復制集、可擴展分片集群。你可以試著從幾大方面了解MongoDB,如實時監控MongoDB工具、內存使用量和頁面錯誤、連接數、資料庫操作、復制集等。
2、Elasticsearch ——為雲構建的分布式RESTful搜索引擎
ElasticSearch是基於Lucene的搜索伺服器。它提供了分布式多用戶能力的全文搜索引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是比較流行的企業級搜索引擎。
ElasticSearch不僅是一個全文本搜索引擎,還是一個分布式實時文檔存儲,其中每個field均是被索引的數據且可被搜索;也是一個帶實時分析功能的分布式搜索引擎,並且能夠擴展至數以百計的伺服器存儲及處理PB級的數據。ElasticSearch在底層利用Lucene完成其索引功能,因此其許多基本概念源於Lucene。
3、Cassandra——開源分布式資料庫管理系統
最初是由Facebook開發的,旨在處理許多商品伺服器上的大量數據,提供高可用性,沒有單點故障。
Apache Cassandra是一套開源分布式NoSQL資料庫系統。集Google BigTable的數據模型與Amazon Dynamo的完全分布式架構於一身。於2008開源,此後,由於Cassandra良好的可擴展性,被Digg、Twitter等Web 2.0網站所採納,成為了一種流行的分布式結構化數據存儲方案。
因Cassandra是用Java編寫的,所以理論上在具有JDK6及以上版本的機器中都可以運行,官方測試的JDK還有OpenJDK 及Sun的JDK。 Cassandra的操作命令,類似於我們平時操作的關系資料庫,對於熟悉MySQL的朋友來說,操作會很容易上手。
4、Redis ——開源(BSD許可)內存數據結構存儲,用作資料庫,緩存和消息代理
Redis是一個開源的使用ANSI C語言編寫的、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
Redis 有三個主要使其有別於其它很多競爭對手的特點:Redis是完全在內存中保存數據的資料庫,使用磁碟只是為了持久性目的; Redis相比許多鍵值數據存儲系統有相對豐富的數據類型; Redis可以將數據復制到任意數。Redis 這么火,它都解決了哪些問題?
5、Hazelcast ——基於Java的開源內存數據網格
Hazelcast 是一種內存數據網格 in-memory data grid,提供Java程序員關鍵任務交易和萬億級內存應用。雖然Hazelcast沒有所謂的「Master」,但是仍然有一個Leader節點(the oldest member),這個概念與ZooKeeper中的Leader類似,但是實現原理卻完全不同。同時,Hazelcast中的數據是分布式的,每一個member持有部分數據和相應的backup數據,這點也與ZooKeeper不同。
Hazelcast的應用便捷性深受開發者喜歡,但如果要投入使用,還需要慎重考慮。
6、Ehcache——廣泛使用的開源Java分布式緩存
主要面向通用緩存、Java EE和輕量級容器。
EhCache 是一個純Java的進程內緩存框架,具有快速、精乾等特點,是hibernate中默認的CacheProvider。
主要特性有:快速簡單,具有多種緩存策略;緩存數據有兩級,內存和磁碟,因此無需擔心容量問題;緩存數據會在虛擬機重啟的過程中寫入磁碟;可以通過RMI、可插入API等方式進行分布式緩存;具有緩存和緩存管理器的偵聽介面;支持多緩存管理器實例,以及一個實例的多個緩存區域;提供Hibernate的緩存實現。Ehcache介紹及整合Spring實現高速緩存。
7、Hadoop ——用Java編寫的開源軟體框架
用於分布式存儲,並對非常大的數據用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群進行高速運算和存儲。
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。Hadoop的框架最核心的設計就是:HDFS和MapRece。HDFS為海量的數據提供了存儲,MapRece則為海量的數據提供了計算。
8、Solr ——開源企業搜索平台,用Java編寫,來自Apache Lucene項目
Solr是一個獨立的企業級搜索應用伺服器,它對外提供類似於Web-service的API介面。用戶可以通過http請求,向搜索引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
與ElasticSearch一樣,同樣是基於Lucene,但它對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化。
9、Spark ——Apache Software Foundation中最活躍的項目,是一個開源集群計算框架
Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地。
10、Memcached ——通用分布式內存緩存系統
Memcached是一套分布式快取系統,當初是Danga Interactive為了LiveJournal所發展的,但被許多軟體(如MediaWiki)所使用。Memcached作為高速運行的分布式緩存伺服器,具有以下的特點:協議簡單,基於libevent的事件處理,內置內存存儲方式。
通過以上的分析,相信你就知道怎麼選擇了