當前位置:首頁 » 服務存儲 » 文件數據寫入存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

文件數據寫入存儲

發布時間: 2022-08-03 14:00:45

① 大量較為頻繁讀寫的文件一般如何進行存儲

如果數據量不是很大(G級別以下),文件不是特別零碎,可以直接存在硬碟上。
但是如果數據量已經/可能超過T級別,或者文件小且零碎,建議還是放在HDFS等分布式文件系統上。
我存儲爬蟲的html以及圖片數據,是通過HDFS的MapFile格式存儲的。MapFile是個已排序的鍵值對文件格式,我的鍵採用的是url的hash+採集時間,值就是文件內容。並且封裝了原生的MapFile.Reader實現了讀取和一定程度的緩存(目前只用了LRU)。
在HDFS提倡一次寫入,多次讀取的前提下,文件的更新只能是通過失效舊,使用新的策略。即把舊的元數據標記為失效,插入新的元數據,並把更新的文件寫入HDFS。讀取是通過新的元數據定位到文件。同時,要定期的清除已失效的文件,即把未失效的元數據讀出來,將對應的文件寫到新的MapFile,刪除舊的MapFile,即可實現物理刪除。
當然還可以使用HBase。HBase是面向列的,二進制存儲的,可橫向拓展的NoSQL。可以把不大於64M的數據作為單元格數據直接寫進去。但是有一定的學習成本,而且對集群的硬體要求比較高。

② php怎麼寫入、存儲數組數據

PHP有自帶的高性能函數 var_export


conn.php

<?php
$dbconfig = array (
'host'=>飗.0.0.1',
'name'=>'root',
'password'=>�',
?>

b.php

<?php
// 讀取配置
include 'conn.php'
echo $dbconfig['host'];
// 修改配置
$dbconfig['host'] = 'xxx.xxx.xxx.xxx'
file_put_contents('conn.php', "<?php $dbconfig = " . var_export($dbconfig) . " ?>");
// 再讀取配置
include 'conn.php'
echo $dbconfig['host'];
?>


參考連接:http://www.php.net/manual/zh/function.var-export.php

③ 如何將大文件寫入到資料庫

最近利用空閑時間自己在寫一個文件備份工具,因為我磁碟上的很多文件很重要,例如很多PPT和講義。所以需要經常備份,而且因為這些文件很多,所以需要增量備份。
我嘗試用過windows自帶的ntbackup工具,但感覺不是很爽。它不支持壓縮備份,而且界面也有點復雜。
為了響應偉大領袖的「自力更生,豐衣足食」的號召,咱決定自己寫一個工具,專門備份到資料庫。支持壓縮,支持加密,支持增量。
本文分享一下其中一些重點的技術細節
其中一個關鍵的技術就是將文件使用二進制的方式存放在資料庫的varbinary(max)的欄位中。該欄位最大允許的長度為2GB。
對於一些小文件,我們可以一次性讀取它的所有位元組,然後一次提交到資料庫
/// <summary>
/// 這個方法演示了如何一次提交所有的位元組。這樣導致的結果是:應用程序立即需要申請等同於文件大小的內存
/// </summary>
static void SubmitFileByOnce() {
string file = @"F:\功夫熊貓.rmvb";//文件大小為519MB
byte[] buffer = File.ReadAllBytes(file);
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) {
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
new SqlParameter("@fileContents",buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有幾個問題,主要體現在如果文件比較大的話
1. 它需要一次性很大的內存,具體數據等同於文件大小。因為File.ReadAllBytes方法是將所有位元組全部讀入到內存。
2. 它會導致提交失敗,就是因為數據太大了。資料庫也會拒絕。
那麼,我就對這個方法做了一下改進,將文件拆分為5MB一段,也就是說,此時每次申請的內存只有5MB。這就大大地提高了可用性。
/// <summary>
/// 這個方法是將文件切分為5MB的塊,每次只是提交5MB,所以可能多次提交,但內存佔用就比較小
/// </summary>
static void SubmitFileStepByStep() {
string file = @"F:\功夫熊貓.rmvb";//以這個文件為例,大小為519MB,一共需要的時間大約94秒。還是有點慢的,所以還可能需要進行壓縮
FileStream fs = new FileStream(file, FileMode.Open);
byte[] buffer = new byte[5 * 1024 * 1024];
int readCount;
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))
{
conn.Open();
while ((readCount = fs.Read(buffer, 0, buffer.Length)) > 0)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
new SqlParameter("@fileContents",buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
這樣的話,有一個後果就是一個文件,可能在資料庫中會有多條記錄。所以在讀取的時候,我們需要對其進行合並
static void DownloadFile() {
string file = @"F:\功夫熊貓.rmvb";
string destfile = @"E:\Temp\Temp.wmv";
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT FileContents FROM Files WHERE FileName=@fileName";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
});
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
FileStream fs = new FileStream(destfile, FileMode.Append, FileAccess.Write);
while (reader.Read())
{
byte[] buffer = (byte[])reader[0];
fs.Write(buffer, 0, buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}
本文由作者:陳希章

④ 硬碟中的讀取和寫入是什麼意思

讀取是將存儲在硬碟中的數據調入系統;寫入是將系統中的數據保存在硬碟中。

系統將文件存儲到磁碟上時,按柱面、磁頭、扇區的方式進行,即最先是第1磁軌的第一磁頭下(也就是第1盤面的第一磁軌)的所有扇區,然後,是同一柱面的下一磁頭,一個柱面存儲滿後就推進到下一個柱面,直到把文件內容全部寫入磁碟。

讀出數據時通過告訴磁碟控制器要讀出扇區所在的柱面號、磁頭號和扇區號(物理地址的三個組成部分)進行。磁碟控制器則 直接使磁頭部件步進到相應的柱面,選通相應的磁頭,等待要求的扇區移動到磁頭下。

拓展資料

硬碟的種類主要是SCSI 、IDE 、以及現在流行的SATA等;任何一種硬碟的生產都要一定的標准;隨著相應的標準的升級,硬碟生產技術也在升級;比如 SCSI標准已經經歷了SCSI-1 、SCSI-2、SCSI-3;其中目前咱們經常在伺服器網站看到的 Ultral-160就是基於SCSI-3標準的;IDE 遵循的是ATA標准,而目前流行的SATA,是ATA標準的升級版本;IDE是並口設備,而SATA是串口,SATA的發展目的是替換IDE。

⑤ 日誌文件的寫志數據如何存儲

日誌記錄方式可以提供我們足夠多定位問題的依據。對於一些復雜系統,例如資料庫,日誌可以承擔數據備份、同步作用,很多分布式資料庫都採用「write-ahead」方案,在節點數據同步時通過日誌文件恢復數據。
日誌文件是不推薦和資料庫存儲在同一個硬碟的,因為一旦硬碟壞了就會一起死掉。當然,如果已經使用了帶容錯的RAID,甚至是盤櫃之類的設備,那麼可以放在一起沒有太大問題。
如果先寫資料庫,後寫日誌,但是在剛好寫了資料庫而未寫日誌的時候崩潰了,那麼根據日誌恢復出來的資料庫就少了一條記錄

⑥ 怎麼實現自定義文件存儲數據

ios中數據存儲有如下幾種:
1、一般數據類型:
Obj-C基於C語言的基本數據類型有:int,float,double、char、Long、Short、Unigned、signed
2、特殊數據類型:
Obj-C還提供了幾個比較特殊的數據類型:id、BOOL、nil、SEL、YES和N
3、使用方法舉例:
id object; //聲明一個id類型的對象
object=[[Car alloc] init];//實例化一個Car的對象並且傳遞給object,此時object是Car的對象
[object run]; //調用Car的run方法
object=[[Bike alloc] init]; //實例化一個Bike對象並傳遞給object,此時object是Bike的對象
[object run]; 調用Bike的run方法
4、自定義對象寫入文件的實現方法:
NSString * file = [documentDirectory :@"file1.txt"];

⑦ C語言中,把數據儲存在txt文件中的代碼怎麼寫的

1、在vscode裡面添加了Python文件和用於讀取的文本文件。

⑧ C++怎麼將數據寫入存儲器

/*下面這個簡單的例子是文件輸入輸出流的。當然你可以只用輸入流,也可以只用輸出流。 */#include <iostream>#include <fstream>using namespace std;int main(int argc, char *argv[]){// 文件輸入流,假設 data.txt 已經存在 ifstream fin( "data.txt" );// 文件輸出流 ofstream fout( "results.txt", ios::app );int temp; // 這個例子的功能是:將 data.txt 中的每個整數加 2 後存入 result.txt 中 while( fin >> temp ) { fout << temp + 2 << endl;} //關閉輸入輸出流 fin.close();fout.close();return 0;}