PHP海量數(shù)據(jù)存儲 php大量數(shù)據(jù)處理

php 數(shù)據(jù)庫圖片存儲問題?

存儲的是相對路徑,可以到網(wǎng)站服務(wù)器上查看,應(yīng)該有upload文件夾,里面就是存儲的圖片,這樣寫的好處是節(jié)省了數(shù)據(jù)庫存儲空間,轉(zhuǎn)移的時候可以直接將整個服務(wù)器的圖片打包轉(zhuǎn)移。

在桑珠孜等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作專業(yè)公司,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,外貿(mào)營銷網(wǎng)站建設(shè),桑珠孜網(wǎng)站建設(shè)費用合理。

訪問的時候,前面可以拼接域名和指定的路徑,這些后臺可以輕松獲取到,然后拼接上服務(wù)器的路徑,我們就可以直接在網(wǎng)頁上訪問到圖片了。

這是很常見的圖片數(shù)據(jù)庫保存方式,和直接把圖片的二進制存入數(shù)據(jù)庫,這樣的方式便于檢索,占用空間小。當(dāng)然,目前主流都采用oss來單獨存儲文件了,就是有專門的文件服務(wù)器,這個時候,一般存儲的是完整的圖片路徑。

windows下 php memcached 設(shè)置最大內(nèi)存

工具:

memcached-1.2.6-win32-bin.zip MemCached服務(wù)端程序(for win)

Memcached Manager win下的MemCached管理工具

安裝配置MemCached服務(wù)端

下載memcached-1.2.6-win32-bin.zip ,解壓后得到memcached.exe,就是memcached的主程序了。比如我們放到MemCached服務(wù)器下的C:\Program Files\MemCacheD下

下載安裝Memcached Manager ,通過這個來管理memcached的服務(wù)端。

打開MemCacheD Manager,點擊 add Server,填寫服務(wù)器信息。我這里直接在本地安裝了memcached。如圖,填完后點擊apply,成功的話右側(cè)會出現(xiàn)服務(wù)器。

點擊Add Instance添加memcached實例。這里有一些配置信息。Ip,端口,內(nèi)存等等,不解釋了。點擊apply后會提示你是否現(xiàn)在啟動,我們這里選是

成功后發(fā)現(xiàn)右側(cè)已經(jīng)有實例了,到此服務(wù)端配置完畢。

二、php安裝Memcached模塊支持

1、下載php_memcache.dll模塊,

你可以從找到對應(yīng)的版本,

php5.3對應(yīng)php_memcache-2.2.6-5.3-vc9-x86.zip

將php_memcache.dll放到php\ext目錄下,

2、修改php.ini來加入擴展,并并重啟apache服務(wù)器

在php.ini加入一行引用擴展,代碼如下:

extension=php_memcache.dll

接著在 php.ini 文件里加上:

[Memcache]

memcache.allow_failover = 1

memcache.max_failover_attempts=20

memcache.chunk_size =8192

memcache.default_port = 11211

最好就放在剛才寫 "extension=php_memcache.dll" 的下面。(這是默認(rèn)的一些配置),重啟apache服務(wù)器,

然后查看一下phpinfo,如果有memcache,那么就說明安裝成功!

測試windows下的Memcached

測試代碼如下:

復(fù)制代碼

?php

$mem = new Memcache;

$mem-connect("127.0.0.1", 11211);

$mem-set('key', 'Hello Memcached!', 0, 60);

$val = $mem-get('key');

echo $val;

?

復(fù)制代碼

php 對海量數(shù)據(jù)修改更新

Failed to create directory

CCLOG("AssetsManagerEx : can not create directory %s\n", fullPath.c_str());

unzClose(zipfile);

return false;

}

}

php怎么寫入、存儲數(shù)組數(shù)據(jù)?

PHP有自帶的高性能函數(shù) var_export

conn.php

?php

$dbconfig = array (

'host'='127.0.0.1',

'name'='root',

'password'='123456',

?

b.php

?php

// 讀取配置

include 'conn.php';

echo $dbconfig['host'];

// 修改配置

$dbconfig['host'] = 'xxx.xxx.xxx.xxx';

file_put_contents('conn.php', "?php\n$dbconfig = " . var_export($dbconfig) . "\n?");

// 再讀取配置

include 'conn.php';

echo $dbconfig['host'];

?

參考連接:

php面試題 memcache和redis的區(qū)別

Redis與Memcached的區(qū)別

傳統(tǒng)MySQL+ Memcached架構(gòu)遇到的問題

實際MySQL是適合進行海量數(shù)據(jù)存儲的,通過Memcached將熱點數(shù)據(jù)加載到cache,加速訪問,很多公司都曾經(jīng)使用過這樣的架構(gòu),但隨著業(yè)務(wù)數(shù)據(jù)量的不斷增加,和訪問量的持續(xù)增長,我們遇到了很多問題:

1.MySQL需要不斷進行拆庫拆表,Memcached也需不斷跟著擴容,擴容和維護工作占據(jù)大量開發(fā)時間。

2.Memcached與MySQL數(shù)據(jù)庫數(shù)據(jù)一致性問題。

3.Memcached數(shù)據(jù)命中率低或down機,大量訪問直接穿透到DB,MySQL無法支撐。

4.跨機房cache同步問題。

眾多NoSQL百花齊放,如何選擇

最近幾年,業(yè)界不斷涌現(xiàn)出很多各種各樣的NoSQL產(chǎn)品,那么如何才能正確地使用好這些產(chǎn)品,最大化地發(fā)揮其長處,是我們需要深入研究和思考的

問題,實際歸根結(jié)底最重要的是了解這些產(chǎn)品的定位,并且了解到每款產(chǎn)品的tradeoffs,在實際應(yīng)用中做到揚長避短,總體上這些NoSQL主要用于解

決以下幾種問題

1.少量數(shù)據(jù)存儲,高速讀寫訪問。此類產(chǎn)品通過數(shù)據(jù)全部in-momery 的方式來保證高速訪問,同時提供數(shù)據(jù)落地的功能,實際這正是Redis最主要的適用場景。

2.海量數(shù)據(jù)存儲,分布式系統(tǒng)支持,數(shù)據(jù)一致性保證,方便的集群節(jié)點添加/刪除。

3.這方面最具代表性的是dynamo和bigtable 2篇論文所闡述的思路。前者是一個完全無中心的設(shè)計,節(jié)點之間通過gossip方式傳遞集群信息,數(shù)據(jù)保證最終一致性,后者是一個中心化的方案設(shè)計,通過類似一個分布式鎖服務(wù)來保證強一致性,數(shù)據(jù)寫入先寫內(nèi)存和redo log,然后定期compat歸并到磁盤上,將隨機寫優(yōu)化為順序?qū)?,提高寫入性能?/p>

4.Schema free,auto-sharding等。比如目前常見的一些文檔數(shù)據(jù)庫都是支持schema-free的,直接存儲json格式數(shù)據(jù),并且支持auto-sharding等功能,比如mongodb。

面對這些不同類型的NoSQL產(chǎn)品,我們需要根據(jù)我們的業(yè)務(wù)場景選擇最合適的產(chǎn)品。

Redis適用場景,如何正確的使用

前面已經(jīng)分析過,Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-

backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那么何時使用

Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區(qū)別,大多數(shù)都會得到以下觀點:

1 Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

2 Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

3 Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進行使用。

拋開這些,可以深入到Redis內(nèi)部構(gòu)造去觀察更加本質(zhì)的區(qū)別,理解Redis的設(shè)計。

Redis中,并不是所有的數(shù)據(jù)都一直存儲在內(nèi)存中的。這是和Memcached相比一個最大的區(qū)別。Redis只會緩存所有的

key的信息,如果Redis發(fā)現(xiàn)內(nèi)存的使用量超過了某一個閥值,將觸發(fā)swap的操作,Redis根據(jù)“swappability =

age*log(size_in_memory)”計

算出哪些key對應(yīng)的value需要swap到磁盤。然后再將這些key對應(yīng)的value持久化到磁盤中,同時在內(nèi)存中清除。這種特性使得Redis可以

保持超過其機器本身內(nèi)存大小的數(shù)據(jù)。當(dāng)然,機器本身的內(nèi)存必須要能夠保持所有的key,畢竟這些數(shù)據(jù)是不會進行swap操作的。同時由于Redis將內(nèi)存

中的數(shù)據(jù)swap到磁盤中的時候,提供服務(wù)的主線程和進行swap操作的子線程會共享這部分內(nèi)存,所以如果更新需要swap的數(shù)據(jù),Redis將阻塞這個

操作,直到子線程完成swap操作后才可以進行修改。

使用Redis特有內(nèi)存模型前后的情況對比:

VM off: 300k keys, 4096 bytes values: 1.3G used

VM on: 300k keys, 4096 bytes values: 73M used

VM off: 1 million keys, 256 bytes values: 430.12M used

VM on: 1 million keys, 256 bytes values: 160.09M used

VM on: 1 million keys, values as large as you want, still: 160.09M used

當(dāng)

從Redis中讀取數(shù)據(jù)的時候,如果讀取的key對應(yīng)的value不在內(nèi)存中,那么Redis就需要從swap文件中加載相應(yīng)數(shù)據(jù),然后再返回給請求方。

這里就存在一個I/O線程池的問題。在默認(rèn)的情況下,Redis會出現(xiàn)阻塞,即完成所有的swap文件加載后才會相應(yīng)。這種策略在客戶端的數(shù)量較小,進行

批量操作的時候比較合適。但是如果將Redis應(yīng)用在一個大型的網(wǎng)站應(yīng)用程序中,這顯然是無法滿足大并發(fā)的情況的。所以Redis運行我們設(shè)置I/O線程

池的大小,對需要從swap文件中加載相應(yīng)數(shù)據(jù)的讀取請求進行并發(fā)操作,減少阻塞的時間。

如果希望在海量數(shù)據(jù)的環(huán)境中使用好Redis,我相信理解Redis的內(nèi)存設(shè)計和阻塞的情況是不可缺少的。

補充的知識點:

memcached和redis的比較

1 網(wǎng)絡(luò)IO模型

Memcached是多線程,非阻塞IO復(fù)用的網(wǎng)絡(luò)模型,分為監(jiān)聽主線程和worker子線程,監(jiān)聽線程監(jiān)聽網(wǎng)絡(luò)連接,接受請求后,將連接描述

字pipe 傳遞給worker線程,進行讀寫IO, 網(wǎng)絡(luò)層使用libevent封裝的事件庫,多線程模型可以發(fā)揮多核作用,但是引入了cache

coherency和鎖的問題,比如,Memcached最常用的stats

命令,實際Memcached所有操作都要對這個全局變量加鎖,進行計數(shù)等工作,帶來了性能損耗。

(Memcached網(wǎng)絡(luò)IO模型)

Redis使用單線程的IO復(fù)用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現(xiàn)了epoll、kqueue和select,

對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對于這些操作,單線程模型實

際會嚴(yán)重影響整體吞吐量,CPU計算過程中,整個IO調(diào)度都是被阻塞住的。

2.內(nèi)存管理方面

Memcached使用預(yù)分配的內(nèi)存池的方式,使用slab和大小不同的chunk來管理內(nèi)存,Item根據(jù)大小選擇合適的chunk存儲,內(nèi)

存池的方式可以省去申請/釋放內(nèi)存的開銷,并且能減小內(nèi)存碎片產(chǎn)生,但這種方式也會帶來一定程度上的空間浪費,并且在內(nèi)存仍然有很大空間時,新的數(shù)據(jù)也可

能會被剔除,原因可以參考Timyang的文章:

Redis使用現(xiàn)場申請內(nèi)存的方式來存儲數(shù)據(jù),并且很少使用free-list等方式來優(yōu)化內(nèi)存分配,會在一定程度上存在內(nèi)存碎片,Redis

跟據(jù)存儲命令參數(shù),會把帶過期時間的數(shù)據(jù)單獨存放在一起,并把它們稱為臨時數(shù)據(jù),非臨時數(shù)據(jù)是永遠(yuǎn)不會被剔除的,即便物理內(nèi)存不夠,導(dǎo)致swap也不會剔

除任何非臨時數(shù)據(jù)(但會嘗試剔除部分臨時數(shù)據(jù)),這點上Redis更適合作為存儲而不是cache。

3.數(shù)據(jù)一致性問題

Memcached提供了cas命令,可以保證多個并發(fā)訪問操作同一份數(shù)據(jù)的一致性問題。 Redis沒有提供cas 命令,并不能保證這點,不過Redis提供了事務(wù)的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。

4.存儲方式及其它方面

Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和復(fù)制等功能

Redis除key/value之外,還支持list,set,sorted set,hash等眾多數(shù)據(jù)結(jié)構(gòu),提供了KEYS

進行枚舉操作,但不能在線上使用,如果需要枚舉線上數(shù)據(jù),Redis提供了工具可以直接掃描其dump文件,枚舉出所有數(shù)據(jù),Redis還同時提供了持久化和復(fù)制等功能。

5.關(guān)于不同語言的客戶端支持

在不同語言的客戶端方面,Memcached和Redis都有豐富的第三方客戶端可供選擇,不過因為Memcached發(fā)展的時間更久一些,目

前看在客戶端支持方面,Memcached的很多客戶端更加成熟穩(wěn)定,而Redis由于其協(xié)議本身就比Memcached復(fù)雜,加上作者不斷增加新的功能

等,對應(yīng)第三方客戶端跟進速度可能會趕不上,有時可能需要自己在第三方客戶端基礎(chǔ)上做些修改才能更好的使用。

根據(jù)以上比較不難看出,當(dāng)我們不希望數(shù)據(jù)被踢出,或者需要除key/value之外的更多數(shù)據(jù)類型時,或者需要落地功能時,使用Redis比使用Memcached更合適。

關(guān)于Redis的一些周邊功能

Redis除了作為存儲之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對于此類功能需要了解其實現(xiàn)原

理,清楚地了解到它的局限性后,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支持的,消費方連接閃斷或重連之間過來的消息是會全部丟

失的,又比如聚合計算和scripting等功能受Redis單線程模型所限,是不可能達(dá)到很高的吞吐量的,需要謹(jǐn)慎使用。

總的來說Redis作者是一位非常勤奮的開發(fā)者,可以經(jīng)??吹阶髡咴趪L試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入了解后再使用。

總結(jié):

1.Redis使用最佳方式是全部數(shù)據(jù)in-memory。

2.Redis更多場景是作為Memcached的替代者來使用。

3.當(dāng)需要除key/value之外的更多數(shù)據(jù)類型支持時,使用Redis更合適。

4.當(dāng)存儲的數(shù)據(jù)不能被剔除時,使用Redis更合適。

談?wù)凪emcached與Redis(一)

1. Memcached簡介

Memcached是以LiveJurnal旗下Danga Interactive公司的Bard

Fitzpatric為首開發(fā)的高性能分布式內(nèi)存緩存服務(wù)器。其本質(zhì)上就是一個內(nèi)存key-value數(shù)據(jù)庫,但是不支持?jǐn)?shù)據(jù)的持久化,服務(wù)器關(guān)閉之后數(shù)

據(jù)全部丟失。Memcached使用C語言開發(fā),在大多數(shù)像Linux、BSD和Solaris等POSIX系統(tǒng)上,只要安裝了libevent即可使

用。在Windows下,它也有一個可用的非官方版本()。Memcached

的客戶端軟件實現(xiàn)非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang,

Lua等。當(dāng)前Memcached使用廣泛,除了LiveJournal以外還有Wikipedia、Flickr、Twitter、Youtube和

WordPress等。

在Window系統(tǒng)下,Memcached的安裝非常方便,只需從以上給出的地址下載可執(zhí)行軟件然后運行memcached.exe –d

install即可完成安裝。在Linux等系統(tǒng)下,我們首先需要安裝libevent,然后從獲取源碼,make make

install即可。默認(rèn)情況下,Memcached的服務(wù)器啟動程序會安裝到/usr/local/bin目錄下。在啟動Memcached時,我們可

以為其配置不同的啟動參數(shù)。

1.1 Memcache配置

Memcached服務(wù)器在啟動時需要對關(guān)鍵的參數(shù)進行配置,下面我們就看一看Memcached在啟動時需要設(shè)定哪些關(guān)鍵參數(shù)以及這些參數(shù)的作用。

1)-p num Memcached的TCP監(jiān)聽端口,缺省配置為11211;

2)-U num Memcached的UDP監(jiān)聽端口,缺省配置為11211,為0時表示關(guān)閉UDP監(jiān)聽;

3)-s file Memcached監(jiān)聽的UNIX套接字路徑;

4)-a mask 訪問UNIX套接字的八進制掩碼,缺省配置為0700;

5)-l addr 監(jiān)聽的服務(wù)器IP地址,默認(rèn)為所有網(wǎng)卡;

6)-d 為Memcached服務(wù)器啟動守護進程;

7)-r 最大core文件大小;

8)-u username 運行Memcached的用戶,如果當(dāng)前為root的話需要使用此參數(shù)指定用戶;

9)-m num 分配給Memcached使用的內(nèi)存數(shù)量,單位是MB;

10)-M 指示Memcached在內(nèi)存用光的時候返回錯誤而不是使用LRU算法移除數(shù)據(jù)記錄;

11)-c num 最大并發(fā)連數(shù),缺省配置為1024;

12)-v –vv –vvv 設(shè)定服務(wù)器端打印的消息的詳細(xì)程度,其中-v僅打印錯誤和警告信息,-vv在-v的基礎(chǔ)上還會打印客戶端的命令和相應(yīng),-vvv在-vv的基礎(chǔ)上還會打印內(nèi)存狀態(tài)轉(zhuǎn)換信息;

13)-f factor 用于設(shè)置chunk大小的遞增因子;

14)-n bytes 最小的chunk大小,缺省配置為48個字節(jié);

15)-t num Memcached服務(wù)器使用的線程數(shù),缺省配置為4個;

16)-L 嘗試使用大內(nèi)存頁;

17)-R 每個事件的最大請求數(shù),缺省配置為20個;

18)-C 禁用CAS,CAS模式會帶來8個字節(jié)的冗余;

2. Redis簡介

Redis是一個開源的key-value存儲系統(tǒng)。與Memcached類似,Redis將大部分?jǐn)?shù)據(jù)存儲在內(nèi)存中,支持的數(shù)據(jù)類型包括:字

符串、哈希表、鏈表、集合、有序集合以及基于這些數(shù)據(jù)類型的相關(guān)操作。Redis使用C語言開發(fā),在大多數(shù)像Linux、BSD和Solaris等

POSIX系統(tǒng)上無需任何外部依賴就可以使用。Redis支持的客戶端語言也非常豐富,常用的計算機語言如C、C#、C++、Object-C、PHP、

Python、Java、Perl、Lua、Erlang等均有可用的客戶端來訪問Redis服務(wù)器。當(dāng)前Redis的應(yīng)用已經(jīng)非常廣泛,國內(nèi)像新浪、淘

寶,國外像Flickr、Github等均在使用Redis的緩存服務(wù)。

Redis的安裝非常方便,只需從獲取源碼,然后make make

install即可。默認(rèn)情況下,Redis的服務(wù)器啟動程序和客戶端程序會安裝到/usr/local/bin目錄下。在啟動Redis服務(wù)器時,我們

需要為其指定一個配置文件,缺省情況下配置文件在Redis的源碼目錄下,文件名為redis.conf。

php 如何將一個13m(60萬行數(shù)據(jù))的txt文件優(yōu)雅的寫入到數(shù)據(jù)庫中

13M并不是太大,先全部存入數(shù)組(內(nèi)存),然后使用SQL一次性導(dǎo)入(最好使用事務(wù)處理,數(shù)據(jù)庫底層會自動優(yōu)化);必要時可在導(dǎo)入前檢查數(shù)據(jù)完備性,反正要點是盡量減少磁盤操作(太耗時)。

本文名稱:PHP海量數(shù)據(jù)存儲 php大量數(shù)據(jù)處理
瀏覽地址:http://muchs.cn/article38/hjsdsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、做網(wǎng)站、企業(yè)網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)