資料庫上億資料庫
⑴ 資料庫需要處理上億條數據,請問買什麼樣的電腦或者伺服器比較合適
上億條的數據 ,什麼數據會用多大資源 怎麼處理的 資料庫作出處理時會用多少資源 這多不是簡單能預見的,所以無法給出配置建議,如果你們有程序員做測試的話就好解決了。要是不了解就直接配個好點的。
⑵ mysql怎樣能建一個可以存儲上億條記錄的資料庫
如果單講存儲,那隻要你的硬碟夠大都可以,但如果要講效率就得想辦法,如根據年份把數據放到不同的表裡,或不同的機子上,因為一個表放這么多數據效率會很低的,但如果分開放又會出現統計、去重這類操作的麻煩,所以設置資料庫不能只考慮三級範式,難的是設置的有效率。
⑶ mysql千萬或者上億的數據怎麼設計資料庫
單表一億?還是全庫1億?
1.首先可以考慮業務層面優化,即垂直分表。
垂直分表就是把一個數據量很大的表,可以按某個欄位的屬性或使用頻繁程度分類,拆分為多個表。
如有多種業務類型,每種業務類型入不同的表,table1,table2,table3.
如果日常業務不需要使用所有數據,可以按時間分表,比如說月表。每個表只存一個月記錄。
2.架構上的優化,即水平分表。
水平分表就是根據一列或多列數據的值把數據行放到多個獨立的表裡,這里不具備業務意義。
如按照id分表,末尾是0-9的數據分別插入到10個表裡面。
可能你要問,這樣看起來和剛才說的垂直分表沒什麼區別。只不過是否具備業務意義的差異,都是按欄位的值來分表。
實際上,水平分表現在最流行的實現方式,是通過水平分庫來實現的。即剛才所說的10個表,分布在10個mysql資料庫上。這樣可以通過多個低配置主機整合起來,實現高性能。
最常見的解決方案是cobar,這個帖子介紹的比較完善,可以看看。
http://blog.csdn.net/shagoo/article/details/8191346
cobar的邏輯層次圖:
不過這種分庫方式也是有一定局限性的,需要應用程序做相應的配合,比如說分庫的情況下,雖然可以實現跨庫查詢,但是不能進行相關的group by計算。
另外,之前關於水平分表的實現方式,也可以通過表分區來實現。
mysql優化的方式有很多,選擇上主要還是要考慮個人的實際情況,如代碼不可控的情況下,就不適合選擇按欄位屬性分表的情況,這樣可能會帶來大量的重構以及很多不可預期的風險。
而架構的優化,雖然對應用是透明的,但對sql的寫法有很多局限性,比如說不能使用聚合函數等等,同時也需要有充足的硬體資源,只有一台伺服器的情況下是沒有意義的。
相比起來,代價最低的是按時間分表或分區,這兩種辦法對應用來說都是透明的。
分區只需要一次本地數據遷移的操作。
而通過分表把現網數據和歷史數據分離,唯一的代價是定期的數據維護。
一般如果表裡面有1億數據的情況下,索引的問題應該是常識了,這方面我就不說了。
⑷ mysql資料庫最大都用過多少條數據的 有上億條的嗎
要看你一條有多大。
MySQL資料庫的最大有效表尺寸通常是由操作系統對文件大小的限制決定的,
而不是由MySQL內部限制決定的。所以,如果你的操作系統支持單個文件超過1T,
應該沒有什麼問題。
大小跟你系統所支持的最大單個文件大小有關
⑸ 上億條記錄,資料庫建立和使用應如何操作
分成若干個庫或表存儲
⑹ 上億數據量用什麼資料庫最好
看你的是什麼數據:
關系型數據:可以參考ali和京東用mysql集群來解決
非關系型數據:使用nosql集群來解決,MongoDB,Redis等
當然數據量特別大,查詢很頻繁的要利用好緩存
⑺ 表中有1億條數據,怎麼查詢最快
我有幾個解決問題的思路,一般我都是這么用的,1億條不算很多
-------------------------華麗麗的分割線---------------------------------
如果是Oracle資料庫的話,首先我們可以將表改成分區表,配合建立分區索引,效率是非常的快的,如果將普通表改成分區表,用Oracle的在線重定義包dbms_redefinition就可以實現
同樣,如果這個表一般不插入數據的話,只供查詢的話,我們還可以將表壓縮,改成收縮表
壓縮後插入效率很低,不過查詢效率很高
如果是其他的資料庫的話,如sybase的話,只能定義一些索引了,並且索引要放在不同的segment裡面,防止查詢的時候I/O爭用的情況出現,降低查詢效果
總的來說,1億條數據不多,還是比較好處理的,我這邊的表多大幾十億都照樣查詢
還有要提醒的是,一個表的數據,我們不能讓它一直增加,要對表做一下數據遷移的策略,比如定時將表的數據遷到其他的歷史表裡面去。如果本身就是歷史表的話就當我沒說哦,呵呵
⑻ MYSQL上億的表如果秒查
1、設計資料庫表
先設計一個資料庫表,用於保存用戶信息,建表語句如下:
CREATE TABLE
tbl_user_info
(
id INT NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex INT(1) NOT NULL,
create_dt DATE NOT NULL,
PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
在用戶表中定義了幾個欄位,分別是id,user_name,age,sex,create_dt,其中id是主鍵,是自增長的,user_name表示用戶名,age表示用戶年齡,sex表示用戶的性別,這里的性別用數字表示,0表示女性,1表示男性,create_dt表示創建的時間。預先在資料庫中插入幾條數據,數據如下。
2、定義實體類
定義一個Bean,與資料庫表中的各個欄位對應:
package com.imooc.jdbc;
import java.uTIl.Date;
public class UserVO {
private int id;
private String userName;
private int age;
private int sex;
private Date createDt;
public int geTId() {
return id;
}
public void seTId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Date getCreateDt() {
return createDt;
}
public void setCreateDt(Date createDt) {
this.createDt = createDt;
}
@Override
public String toString() {
return 「UserVO [id=」 + id + 「, userName=」 + userName + 「, age=」 + age
+ 「, sex=」 + sex + 「, createDt=」 + createDt + 「]」;
}
}
3、定義資料庫連接類
定義一個資料庫連接類,用於獲取MySQL的連接
package com.imooc.jdbc;
import java.sql.ConnecTIon;
import java.sql.DriverManager;
public class DBUtil {
private static final String URI = 「jdbc:mysql://192.168.2.207:3306/jdbc_demo?」
+ 「user=root&password=root&useUnicode=true&characterEncoding=UTF-8」;
private static final String DRIVER = 「com.mysql.jdbc.Driver」;
public static Connection connectDB() throws Exception {
//1、載入資料庫驅動
Class.forName(DRIVER);
//2、獲取資料庫連接
Connection conn = DriverManager.getConnection(URI);
return conn;
}
}
MySQL的JDBC URL編寫方式為:jdbc:mysql://主機名稱:連接埠/資料庫的名稱?參數=值,在這個例子中我連接的資料庫主機是一台遠程主機,所以主機名稱為遠程主機的ip地址,如果資料庫主機為本機,則可以定義為localhost,在參數中指定用戶名為root,密碼也是root,為了避免中文亂碼要指定useUnicode和characterEncoding。因為連接的是MySQL資料庫,所以程序一開始需要載入MySQL的資料庫驅動,然後通過DriverManager.getConnection(String URL)方法獲取資料庫的連接。
4、實現資料庫的增刪改查
在獲取了資料庫的連接之後,就可以操作資料庫了,下面分別實現資料庫的增刪改查操作,定義一個UserDao類用於操作資料庫。
1)查詢
先看查詢操作,查詢可以一次查詢出所有的數據,也可以根據相應的條件查詢。
查詢所有的數據,在UserDao中定義一個queryAll()方法:
public List<UserVO> queryAll() throws Exception {
Connection conn = DBUtil.connectDB();
String sql = 「SELECT * FROM tbl_user_info」;
List<UserVO> userList = new ArrayList<UserVO>();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
UserVO user = new UserVO();
user.setId(rs.getInt(「id」));
user.setUserName(rs.getString(「user_name」));
user.setAge(rs.getInt(「age」));
user.setSex(rs.getInt(「sex」));
user.setCreateDt(rs.getDate(「create_dt」));
userList.add(user);
}
return userList;
}