数据库上亿数据库
⑴ 数据库需要处理上亿条数据,请问买什么样的电脑或者服务器比较合适
上亿条的数据 ,什么数据会用多大资源 怎么处理的 数据库作出处理时会用多少资源 这多不是简单能预见的,所以无法给出配置建议,如果你们有程序员做测试的话就好解决了。要是不了解就直接配个好点的。
⑵ 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;
}