這個問題在PHP的官方網站上叫緩沖查詢和非緩沖查詢(Buffered and Unbuffered queries)。PHP的查詢缺省模式是緩沖模式。也就是說,查詢數據結果會一次全部提取到內存里供PHP程序處理。這樣給了PHP程序額外的功能,比如說,計算行數,將指針指向某一行等。更重要的是程序可以對數據集反復進行二次查詢和過濾等操作。但這種緩沖查詢模式的缺陷就是消耗內存,也就是用空間換速度。
創新互聯建站致力于互聯網品牌建設與網絡營銷,包括成都網站設計、網站建設、SEO優化、網絡推廣、整站優化營銷策劃推廣、電子商務、移動互聯網營銷等。創新互聯建站為不同類型的客戶提供良好的互聯網應用定制及解決方案,創新互聯建站核心團隊10多年專注互聯網開發,積累了豐富的網站經驗,為廣大企業客戶提供一站式企業網站建設服務,在網站建設行業內樹立了良好口碑。
相對的,另外一種PHP查詢模式是非緩沖查詢,數據庫服務器會一條一條的返回數據,而不是一次全部返回,這樣的結果就是PHP程序消耗較少的內存,但卻增加了數據庫服務器的壓力,因為數據庫會一直等待PHP來取數據,一直到數據全部取完。
很顯然,緩沖查詢模式適用于小數據量查詢,而非緩沖查詢適應于大數據量查詢。
mysql_query函數查詢的方式是查詢出全部結果后緩存到內存中,這樣就會出現超內存的現象,使用另外一個函數mysql_unbuffered_query可以解決這個問題,mysql_unbuffered_query不會緩存結果集,而是查詢出來數據后立馬對結果集進行操作,也就是便查詢邊返回,這樣就不會出現超出內存的現象,但是使用mysql_unbuffered_query的是時候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 發送一條新的 SQL 查詢之前,必須提取掉所有未緩存的 SQL 查詢所產生的結果行。例如:
使用緩存結果集的代碼:
function selecttest()
{
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');
// 不使用緩存結果集方式
// $pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$sth = $pdo-prepare('select * from test');
$sth-execute();
echo '最初占用內存大小:' . memory_get_usage() . "\n";
$i = 0;
while ($result = $sth-fetch(PDO::FETCH_ASSOC)) {
$i += 1;
if ($i 10) {
break;
}
sleep(1);
print_r($result);
echo '占用內存大小:' . memory_get_usage() . "\n";
}
} catch (Exception $e) {
echo $e-getMessage();
}
}
執行時將會報超出內存的錯誤:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56
Call Stack:
0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0
0.0005 135568 2. test-selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85
0.0050 142528 3. PDOStatement-execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56
將上面代碼中的$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注釋去掉后將不在緩存結果集,這時運行該函數的結果如下:
最初占用內存大小:144808
Array
(
[id] = 1
[a] = v
[b] = w
[c] = i
)
占用內存大小:145544
Array
(
[id] = 2
[a] = b
[b] = l
[c] = q
)
占用內存大小:145544
Array
(
[id] = 3
[a] = m
[b] = p
[c] = h
)
占用內存大小:145536
Array
(
[id] = 4
[a] = j
[b] = i
[c] = b
)
占用內存大小:145536
可以看到,這時返回一條數據內存占用非常的小,也就700多字節,這樣就不會出現超出內存的錯誤了。
目前主流的編程軟件VisualBasic的版本是VisualBasic 6.0專業版。我們所使用的操作系統是Windows10。
先把VisualBasic 6.0的安裝光盤放入電腦的光盤驅動器中,通常電腦能夠自動運行光盤上的安裝程序。在安裝VisualBasic之前,最好先詳細地閱讀一下光盤上的Readme.txt文件,了解安裝VisualBasic 6.0需要的一些基本知識,然后單擊光盤上的Setup.exe文件,并按照安裝程序的提示進行操作。
首先,安裝程序會顯示一個啟動畫面。如果使用的是不同的安裝盤,也許Readme文件的格式可能有所不同,但是不影響應用程序的安裝。
在上面的對話框中可以直接單擊對話框上的【下一步】按鈕,進入下面的操作。這時會進入一個顯示微軟的最終用戶許可協議書的窗口,里面的內容規定了最終用戶的一些必要的義務。在這里只能選擇同意,因為如果選擇不同意,安裝程序就退出了。
在下面的窗口中,將要求用戶輸入用戶名和所屬的公司名稱,并輸入產品的ID號。這個ID號應該包含在購買的光盤中。輸入相應的信息之后,單擊【下一步】按鈕。如果輸入的ID號正確,那么將進入VisualBasic 6.0安裝程序的下一個窗口,在這里有兩個選項,對話框中對這兩個選項進行了必要的解釋。在這里選擇第一個選項,也是安裝程序的默認選項。
單擊【下一步】按鈕,進入安裝程序的下一個對話框。在這個對話框中,安裝程序要求選擇VisualBasic 6.0應用程序的公共文件的安裝路徑。在這里可以根據自己的需要把應用程序安裝到希望的路徑中。在完成了路徑的選擇之后,單擊【下一步】按鈕,進入安裝程序的下一步操作。?這時完成了安裝程序的初始配置,現在進入了真正和VisualBasic 6.0相關的安裝程序,在經過一段初始化操作之后,安裝程序將顯示選擇安裝類型的對話框。
在這個對話框中,要進行兩個操作,一個是選擇VisualBasic 6.0系統的安裝路徑,第二個是選擇程序的安裝類型。這里同樣可以任意指定程序的安裝位置,比如指定到“E:/VB”。在選擇安裝類型的時候,有兩個選擇:典型安裝,是安裝程序根據最常用的選項安裝,第二項是允許根據需要來配置安裝選項。
單擊【自定義安裝】按鈕,會顯示設置安裝選項的對話框。
在左邊的列表框中選中或者清除復選框,就表示要或者不要安裝相應的組件。單擊對話框右邊的【更改選項】按鈕,可以進行更為細致的設置。
選擇好了需要的選項之后,單擊【繼續】按鈕,可以開始復制VisualBasic 6.0的文件,當程序復制完所有的文件,并進行相應的系統配置之后,就會要求重新啟動Windows,按照要求重新啟動系統之后,VisualBasic 6.0的安裝工作就基本完成了。
在重新啟動電腦之后,系統會詢問是否安裝MSDN,這是VisualBasic 6.0的幫助系統,可以根據自己的需要安裝這個系統。
希望我能幫助你解疑釋惑。
數據挖掘現在用的比較多的是python。
數據分析這塊現在用的比較多的是scala。
php不適合做大數據分析
當前文章:php分析大量數據 php數據統計分析
文章鏈接:http://m.kartarina.com/article30/dogiopo.html
成都網站建設公司_創新互聯,為您提供ChatGPT、響應式網站、關鍵詞優化、品牌網站建設、自適應網站、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯