精华内容
下载资源
问答
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式...

    从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
    2 基本思想之为什么要分库分表?

    数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
    3 分库分表的实施策略。

    分库分表有垂直切分和水平切分两种。
    3.1 何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。
    3.2 何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。
    3.3 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。
    如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。
    而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。
    在现实项目中,往往是这两种情况兼而有之,这就需要做出权衡,甚至既需要垂直切分,又需要水平切分。我们的游戏项目便综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后,再针对一部分表,通常是用户数据表,进行水平切分。
    4 分库分表存在的问题。

    4.1 事务问题。
    在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
    4.2 跨库跨表的join问题。
    在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。
    4.3 额外的数据管理负担和数据运算压力。
    额外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order by语句就可以搞定,但是在进行分表之后,将需要n个order by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果。 

    转载于:https://www.cnblogs.com/520playboy/p/6275188.html

    展开全文
  • 1.STL中的unordered_map和priority_queue使用的底层数据结构分别是什么?() rbtree,queue hashtable,heap rbtree,heap hashtable,queue 解答:B 链接:...

    1.STL中的unordered_map和priority_queue使用的底层数据结构分别是什么?()

    • rbtree,queue
    • hashtable,heap
    • rbtree,heap
    • hashtable,queue
    解答:B
    链接:https://www.nowcoder.com/questionTerminal/fe96501afbc543c9a8b2c760fc5ce503
    来源:牛客网

    unordered_map:是所谓的哈希map,很容易就选了hashtable
    priority_queue:是所谓的优先级队列,说白了就是一个二叉堆,所以底层应该是用heap实现,并非名字中的queue

    对STL还不了解,这一题暂时先放这,网上搜到一篇讲解STL的文章



    展开全文
  • VBA运行后提示自动化错误,对象库未注册。![图片说明]...在别的电脑上运行成功的,装的office一样的版本,搞不懂为什么自己的电脑上不行。麻烦大神帮忙解决下,不胜感激!
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式...

      

    1 基本思想之什么是分库分表?
    从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
    2 基本思想之为什么要分库分表?

    数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
    3 分库分表的实施策略。

    分库分表有垂直切分和水平切分两种。
    3.1 何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。
    3.2 何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。
    3.3 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。
    如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。
    而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。
    在现实项目中,往往是这两种情况兼而有之,这就需要做出权衡,甚至既需要垂直切分,又需要水平切分。我们的游戏项目便综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后,再针对一部分表,通常是用户数据表,进行水平切分。
    4 分库分表存在的问题。

    4.1 事务问题。
    在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
    4.2 跨库跨表的join问题。
    在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。
    4.3 额外的数据管理负担和数据运算压力。
    额外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order by语句就可以搞定,但是在进行分表之后,将需要n个order by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果。
    上述整理于互联网
    3.数据库优化有哪些? 分别需要注意什么?

    1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。

    调整不良SQL通常可以从以下几点切入:
    检查不良的SQL,考虑其写法是否还有可优化内容
    检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写
     检查优化索引的使用
     考虑数据库的优化器
     
    2. 避免出现SELECT * FROM table 语句,要明确查出的字段。
     
    3. 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
     
    4. 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。
     
    5. 在判断有无符合条件的记录时建议不要用SELECT COUNT (*)和select top 1 语句。
     
    6. 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。
     
    7. 应绝对避免在order by子句中使用表达式。
     
    8. 如果需要从关联表读数据,关联的表一般不要超过7个。
     
    9. 小心使用 IN OR,需要注意In集合中的数据量。建议集合中的数据不超过200个。
     
    10. <> 用 < 、 > 代替,>用>=代替,<用<=代替,这样可以有效的利用索引。
     
    11. 在查询时尽量减少对多余数据的读取包括多余的列与多余的行。
     
    12. 对于复合索引要注意,例如在建立复合索引时列的顺序是F1,F2,F3,则在whereorder by子句中这些字段出现的顺序要与建立索引时的字段顺序一致,且必须包含第一列。只能是F1或F1,F2或F1,F2,F3。否则不会用到该索引。
     
    13. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下select sum(table1.je) from table1 table1, table2 table2, table3 table3 where (table1的等值条件(=)) and (table1的非等值条件) and (table2与table1的关联条件) and (table2的等值条件) and (table2的非等值条件) and (table3与table2的关联条件) and (table3的等值条件) and (table3的非等值条件)。
    注:关于多表查询时from 后面表的出现顺序对效率的影响还有待研究。
     
    14. 子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。应该用如下语句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100。
     
    15. 在WHERE 子句中,避免对列的四则运算,特别是where 条件的左边,严禁使用运算与函数对列进行处理。比如有些地方 substring 可以用like代替。
     
    16. 如果在语句中有not inin)操作,应考虑用not exists(exists)来重写,最好的办法是使用外连接实现。
     
    17. 对一个业务过程的处理,应该使事物的开始与结束之间的时间间隔越短越好,原则上做到数据库的读操作在前面完成,数据库写操作在后面完成,避免交叉。
     
    18. 请小心不要对过多的列使用列函数和order by,group by等,谨慎使用disti软件开发t。
     
    19. 用union all 代替 union,数据库执行union操作,首先先分别执行union两端的查询,将其放在临时表中,然后在对其进行排序,过滤重复的记录。
    当已知的业务逻辑决定query A和query B中不会有重复记录时,应该用union all代替union,以提高查询效率。
     
    数据更新的效率
    1. 在一个事物中,对同一个表的多个insert语句应该集中在一起执行。
    2. 在一个业务过程中,尽量的使insert,update,delete语句在业务结束前执行,以减少死锁的可能性。
     
    数据库物理规划的效率
     
    为了避免I/O的冲突,我们在设计数据库物理规划时应该遵循几条基本的原则(以ORACLE举例):
     tableindex分离:tableindex应该分别放在不同的tablespace中。
     
     Rollback Segment的分离:Rollback Segment应该放在独立的Tablespace中。
     
     System Tablespace的分离:System Tablespace中不允许放置任何用户的object。(mssql中primary filegroup中不允许放置任何用户的object)
     
     Temp Tablesace的分离:建立单独的Temp Tablespace,并为每个user指定default Temp Tablespace
     
    避免碎片:但segment中出现大量的碎片时,会导致读数据时需要访问的block数量的增加。对经常发生DML操作的segemeng来说,碎片是不能完全避免的。所以,我们应该将经常做DML操作的表和很少发生变化的表分离在不同的Tablespace中。
     
    当我们遵循了以上原则后,仍然发现有I/O冲突存在,我们可以用数据分离的方法来解决。
     连接Table的分离:在实际应用中经常做连接查询的Table,可以将其分离在不同的Taclespace中,以减少I/O冲突。
     
     使用分区:对数据量很大的TableIndex使用分区,放在不同的Tablespace中。
     
    在实际的物理存储中,建议使用RAID。日志文件应放在单独的磁盘中。

    转载于:https://www.cnblogs.com/bcphp/p/7156135.html

    展开全文
  • 刚更新几行数据,同事查到一个分的数据同步到总。于是想到是不是同步出现什么错误了。 在发布实例中打开 “复制监视器” ,没发现有错误,队列读取器、日志读取器、分发都正常同步数据。 发布数据库没有错误...

    刚更新几行数据,同事查到一个分库的数据未同步到总库。于是想到是不是同步出现什么错误了。

    在发布实例中打开 “复制监视器” ,没发现有错误,队列读取器、日志读取器、分发都正常同步数据。

    发布数据库没有错误,想到可能是订阅数据传递堵住了。



    查看订阅数据库等待同步到发布的事务和命令数:

    SELECT COUNT(*)  FROM [Platform].[dbo].[MSrepl_queuedtraninfo](NOLOCK)
    SELECT COUNT(*)  FROM [Platform].[dbo].[MSreplication_queue](NOLOCK)


    果然,有堵住,该订阅分库的队列一直在增加。是不是资源正在被其他进程访问?

    --检查当前存在的堵塞(blocked =0 为堵塞的session,多执行几次查看)
    select p.*,s.text from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s
    where blocked > 0 or spid in(select blocked from master.dbo.sysprocesses where blocked > 0)


    也没有堵塞,是不是CPU申请不到?看看当前在执行什么操作:

    SELECT
    [session_id],
    [blocking_session_id] AS '正在阻塞其他会话的会话ID',
    [request_id],
    [start_time] AS '开始时间',
    [status] AS '状态',
    [command] AS '命令',
    dest.[text] AS 'sql语句', 
    DB_NAME([database_id]) AS '数据库名',
    [wait_type] AS '等待资源类型',
    [wait_time] AS '等待时间',
    [wait_resource] AS '等待的资源',
    [reads] AS '物理读次数',
    [writes] AS '写次数',
    [logical_reads] AS '逻辑读次数',
    [row_count] AS '返回结果行数'
    FROM sys.[dm_exec_requests] AS der 
    CROSS APPLY  sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 
    WHERE [session_id]>50 AND DB_NAME(der.[database_id])='platform' and session_id<>@@SPID
    ORDER BY [cpu_time] DESC
    
    select p.*,s.text from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s
    where spid=154


    发现等待的类型是 ASYNC_NETWORK_IO ,意思是数据已经准备好了,但是网络并没有完全取走结果集。suspended 表示CPU正等待资源。而等待的 sql 语句为 sys.sp_replsqlqgetrows  ,即表示正在从等待同步的事务表和命令表中获取数据,是什么命令导致等待?

    (在订阅库)从队列表中按时间查看最早插入到该表的事务,确定为该事务正在执行中…………

    SELECT top 5 * FROM [Platform].[dbo].[MSreplication_queue](NOLOCK)order by insertdate


    (在订阅库)找到该事务,看看执行了什么命令

    --  tranid 为上面查到的事务id
    exec sys.sp_replqueuemonitor 'publisher','publisher_db','publication','tranid',0
    


    结果近6万行数据需要同步,command 中有一个存储过程 create procedure [dbo].[sp_MSsync_upd_10C4B6FD_0596_42B0_862B_ED17BFD4BB97]  ,但是看不到是哪个表的数据。现在到发布数据库,查看该存储过程的定义。

    sp_helptext [sp_MSsync_upd_10C4B6FD_0596_42B0_862B_ED17BFD4BB97]


    在存储过程内部查看一下,都可以找到相关表的信息。


    知道是该表,也就确定了,因为这个表是数据库中最大的表,分页也会很多,突然更新6万行数据,同步时当然会较久了。十几分钟后,数据同步完整,等待同步的队列也就减少了。没什么问题,虚惊一场!~




    展开全文
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式...
  • 一下内容全都这个来源复制的 1 基本思想之什么是分表? 从字面上简单理解,就是把原本存储于一个的数据分块存储到多个上,把原本...数据库中的数据量不一定可控的,在进行分分表的情况下,随着时...
  • 线上出现问题,就像XX定律。它一定会出现,没听说过哪个团队零失误。...本来这没什么好说的,但是想着还有其他朋友可能需要,就简单记录一下。不要说什么规范那规则,实际工作中 案发现场 我如何处理的 ...
  • 1 基本思想之什么是分表?从字面上简单理解,就是把原本存储于一个的数据分块存储到多个...数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数...
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式...
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式
  • 数据库中的数据量不一定可控的,在进行分分表的情况下,随着时间和业务的发展,中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式...
  • 一、安装 安装mlab库 ... No module named 'docutils' (不知道这是什么库) pip install docutils (安装) Installing collected packages: docutils Successfully installed docutils-0.15.2...
  • GCC静态和动态

    2019-05-29 21:42:43
    什么是库: 个人理解就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员...在windows中,静态库是以.lib为后缀的见,共享库是以.dll为后缀的文件。 **静态库:**静态库在程序编译时会被连接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,024
精华内容 809
关键字:

未库是什么库