將緩存中百萬數據插入資料庫
⑴ 怎麼把一個文本裡面的幾百萬條數據導入到資料庫裡面
你用什麼軟體編寫的sql資料庫,我之前用過將文本中數據記錄首先導入 EXCEL表中 ,在利用SQL中的導入數據功能導入。這樣就能完成,你試試看。
⑵ java 怎麼把5萬條數據分批插入數據到mysql,之前插1,2萬沒事, 多了就內存溢出
你的事務控制問題。
大量數據插入的時候,可以將數據量分批,每次事務提交一批。
例如:
con.setAutoCommit(false);// 更改JDBC事務的默認提交方式
Statement stmt = conn.createStatement();
// 第一批 省略n條
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事務
stmt.close();
// 第二批 省略n條
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事務
stmt.close();
// 第n批
。。。。。。
con.setAutoCommit(true);// 恢復JDBC事務的默認提交方式
conn.close();
⑶ PL/SQL工具怎麼快速將數百萬條.sql文件數據插入ORACLE資料庫
在確定你的.sql文件沒有錯誤的情況下,在pl/sql命令行模式下使用:"@d:xx.sql" 就可以直接執行。其中路徑名稱與文件名視你的情況而定(不帶"")。操作如圖:
還可以控制 每次插入 1000條數據,commit,循環繼續插入,保證表空間大小
⑷ 請問jpa有一級緩存嗎如果用jpa向資料庫連續插入百萬千萬條數據,該如何解決效率問題
不清楚jpa是什麼。你說的連續插入是怎麼回事?很多業務運行的數據,還是就是導入數據?倒入數據可以用其他手段
⑸ C#中怎樣將緩存中的數據保存到資料庫中
要看你的具體應用,一般而言,是不要把緩存的數據保存到資料庫的,因為實際應用中大多情況下使用緩存的目的是減輕資料庫的壓力,所以緩存中的數據只會比資料庫舊不會比資料庫新,需要考慮的問題是何時把資料庫中的數據更新至緩存。
⑹ java怎麼實現千萬級數據量批量插入到資料庫中
先存進緩存資料庫中,如redis等。然後寫定時任務批量插入資料庫
⑺ 大量實時數據如何寫入到資料庫
如果是實時的數據,自己寫程序總數最方便的。
常見解決方案:所有保存任務扔到一個隊列,由後台的線程池執行隊列中的保存任務。
如果會java或者C#這種高級語言,啥都好辦,隊列可以放在內存中,如果只會shell或者php,可以用文件作為隊列。
如果不會寫程序,可以考慮在內存檔中創建一個資料庫,將實時數據寫到這里,作為緩存,然後通過類似mysql主從資料庫這種結構將數據同步到硬碟上,不過這種方案設置起來非常麻煩。
⑻ 如何使用redis緩存加索引處理資料庫百萬級並發
1.總的老說,優化方案中只有兩種,一種是給查詢的欄位加組合索引。另一種是給在用戶和資料庫中增加緩存 2.添加索引方案:面對1~2千的並發是沒有壓力的,在往上則限制的瓶頸就是資料庫最大連接數了
⑼ 像資料庫一次性插入10w條數據,怎麼插入效率快啊!
在SQL Server 中插入一條數據使用Insert語句,但是如果想要批量插入一堆數據的話,循環使用Insert不僅效率低,而且會導致SQL一系統性能問題
下面介紹SQL Server支持的兩種批量數據插入方法:Bulk和表值參數(Table-Valued Parameters)。
bulk方法主要思想是通過在客戶端把數據都緩存在Table中,然後利用SqlBulkCopy一次性把Table中的數據插入到資料庫
代碼如下:
public static void BulkToDB(DataTable dt)
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
bulkCopy.DestinationTableName = "BulkTestTable";
bulkCopy.BatchSize = dt.Rows.Count;
try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != 0)
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
}
public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
new DataColumn("Id",typeof(int)),
new DataColumn("UserName",typeof(string)),
new DataColumn("Pwd",typeof(string))});
return dt;
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
for (int multiply = 0; multiply < 10; multiply++)
{
DataTable dt = Bulk.GetTableSchema();
for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++)
{
DataRow r = dt.NewRow();
r[0] = count;
r[1] = string.Format("User-{0}", count * multiply);
r[2] = string.Format("Pwd-{0}", count * multiply);
dt.Rows.Add(r);
}
sw.Start();
Bulk.BulkToDB(dt);
sw.Stop();
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}
Console.ReadLine();
}
⑽ MySQL資料庫 寫入大量數據如何實現
//最快的方法10000記錄23MS
publicstaticvoidinsert(){
//開時時間
Longbegin=newDate().getTime();
//sql前綴
Stringprefix="INSERTINTOtb_big_data(count,create_time,random)VALUES";
try{
//保存sql後綴
StringBuffersuffix=newStringBuffer();
//設置事務為非自動提交
conn.setAutoCommit(false);
//Statementst=conn.createStatement();
//比起st,pst會更好些
PreparedStatementpst=conn.prepareStatement("");
//外層循環,總提交事務次數
for(inti=1;i<=100;i++){
//第次提交步長
for(intj=1;j<=10000;j++){
//構建sql後綴
suffix.append("("+j*i+",SYSDATE(),"+i*j
*Math.random()+"),");
}
//構建完整sql
Stringsql=prefix+suffix.substring(0,suffix.length()-1);
//添加執行sql
pst.addBatch(sql);
//執行操作
pst.executeBatch();
//提交事務
conn.commit();
//清空上一次添加的數據
suffix=newStringBuffer();
}
//頭等連接
pst.close();
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
//結束時間
Longend=newDate().getTime();
//耗時
System.out.println("cast:"+(end-begin)/1000+"ms");
}