日期:2014-05-17  浏览次数:20545 次

请教,关于高频率读写数据库

--1. 假设有这么一张表:m_table
IF EXISTS ( SELECT * FROM sys.sysobjects WHERE type='u' AND name='m_table') 
DROP TABLE m_table

CREATE TABLE m_table
(
id INT IDENTITY(1,1) PRIMARY KEY,
name1 NVARCHAR(10),
name2 NVARCHAR(20),
createtime DATETIME
)
--2. 假设m_table表里的数据已经有100万
--3. 现在有个需求
-----a.每隔1秒向表m_table写一条数据,同时修改表m_table中的另一条数据。
-----b.每隔10秒删除表m_table中的一条数据

--4. 请问如此高频率地操作m_table表后果将是怎样?该如果改进?


------解决方案--------------------
业务需求是什么啊?单单从这张表设计来看没有问题
------解决方案--------------------
--一般查询时加(nolock)则不会出现死锁情况
select * from m_table (nolock)

--更新时加行锁
update m_table  WITH (ROWLOCK) set [name]='XXX' where id=1

------解决方案--------------------
--这个频率,不算高
--#1.如果此表没有唯一索引,那么每隔1秒向表m_table写一条数据不是问题
--#2.每隔1秒,同时修改表m_table中的另一条数据.这个就要建立相关的索引了.因为只查一条,具有高选择性.建立合适的索引后,问题也不大
--#3.每隔10秒删除表m_table中的一条数据。具有高选择性,问题也不大。

--#4.问题。
--因为你的ID是主键,应该默认也是聚集索引,所以插入数据应该问题不大;
--修改数据的话,3个字段(2个NVARCHAR,1个DATETIME)也不会引起页的太多碎片;
--删除数据的话,会造成一定的索引(聚集和非聚集)碎片,定期在系统空闲的时候,整理即可
--100W数据量的话,也不算很大,如果总数据量增长不是很快。加索引即可

------解决方案--------------------
这个需求负荷很小呀
------解决方案--------------------
每秒写几十到上万次,才算高频
------解决方案--------------------
引用:
Quote: 引用:

每秒写几十到上万次,才算高频
写上万条数据1秒够用?


刚刚看到,微博是每秒万级别,twitter是每秒十万级别