`
wbj0110
  • 浏览: 1611371 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Netlog中数据库演变过程(转载)

阅读更多

Netlog拥有4000万活跃用户,每个月有超过5000万的独立用户访问网站,每个月有5亿多的PV。数据量应该算是比较大的。作者是Jurriaan Persyn,他从一个开发者角度而非DBA或者SA角度来谈Netlog是如何通过数据切分来提高网站

性能,横向扩展数据层的

 

第一阶段:读写同在一台数据库服务器

 

 

第二阶段:读写分离(可以解决读写比例均衡或者读居多的情况,但是带入了数据复制同步的问题)

 

第三阶段:部分数据独立部署结合读写分离。(部分数据根据其业务独立性情况,可以将所有的数据独立存储到数据库服务器,分担数据读写压力,前提是要求数据具有较高的业务独立性)

 

 

第四阶段:数据分拆结合读写分离(三阶段的增强)

 

 

 

第五阶段:问题出现,分拆也无法解决数据爆炸性增长,同时读写处于同等比例

 

 

解决问题两种方式:DB Scale up DB Scale out。前者投入以及后期扩展有限,因此需要进行数据切分

 

 

 

 

 

 

上图就是将photo的数据切分到了10台数据库服务器上。

 

切分数据的两个关键点:

1.  如何根据存储的数据内容判断数据的存储归属,也就是什么是内容的分区主键。

2.  采用什么算法可以根据不同的主键将内容存储到不同的分区中。

 

分区主键的选择还是要根据自身的业务场景来决定,Netblog选择的是用户ID

采用什么方式将分区主键映射到对应的分区可以通过以下四种方式:

1.  根据数据表来切分。(前提就是数据独立性较强,和前面提到的三阶段类似)

2.  基于内容区间范围的分区。(就好比前1000个用户的信息存储在A服务器,1000-2000存储在B服务器)

3.  采用Hash算法结合虚拟节点的方式。(这类在memcached等等分布式场景中最常见,其实也是一个难点),缺点就是在于动态增加存储节点会导致数据部分或者全部失效。

4.  目录式的分区。最简单也是最直接的方式,key和分区的对应关系被保存,通过查找目录可以得到分区信息。适合扩展,就是增加查询损耗。

 

如何将数据分布的尽量均匀,如何平衡各个服务器之间的负载,如何在新增存储机器和删除存储机器的时候不影响原有数据,同时能够将数据均摊,都是算法的关键。在分布式系统中DHTDistribute Hash Table)被很多人研究,并且有很多的论文是关于它的。

 

数据的横向切分给应用带来的问题:

1.  跨区的数据查询变得很困难。(对于复杂的关联性数据查询无法在一个请求中完成)

2.  数据一致性和引用完整性较难保证。(多物理存储的情况下很难保证兼顾效率、可用性、一致性)

3.  数据分区之间的负载均衡问题。(数据本身的不均衡性,访问和读写的不均衡性都会给数据分区的负载均衡带来困难)

4.  网络配置的复杂性。(需要保证服务器之间的大数据量频繁的交互和同步)

5.  数据备份策略将会变得十分复杂。

解决这些问题当前已经有的一些开源项目:

1.  MySql Cluster,解决读写分离问题已经十分成熟。

2.  MySql Partitioning,可以将一个大表拆分为很多小表,提高访问速度,但是限制与这些小表必须在同一台服务器上。

3.  HSCALESpock Proxy都是建立与MySql Proxy基础上的开源项目,MySql Proxy采用LUA脚本来进行数据分区。

4.  HiveDBMySql分区框架的java实现。

5.  另外还有HyperTable,HBase,BigTable\oracle等等。

分享到:
评论

相关推荐

    神州数码NETLOG快速入门

    《神州数码NETLOG快速入门详解》 神州数码NETLOG是一款专业的网络行为日志管理系统,它在企业网络管理中起着至关重要的作用。...在实际使用过程中,不断学习和实践,才能更好地发挥NETLOG的价值。

    import_netlog.rar_NetLog_import_netlog_syslog_日志_日志服务器

    本项目“import_netlog.rar”似乎是一个专门用于处理NetLog和syslog的日志导入工具,帮助用户将日志数据从syslog服务器中提取出来,解析后存储到数据库,以便进一步分析和利用。下面我们将详细探讨NetLog、syslog、...

    DCBI-NetLog上网行为日志系统用户手册-v6.0

    DCBI-NetLog上网行为日志系统用户手册-v6.0

    netlog网页版中文帮助手册

    netlog网页版中文帮助手册

    Go-Netlog-一个轻量级HTTP-centric基于日志(Kafka风格)的消息队列

    在本文中,我们将深入探讨Go-Netlog的核心特性、工作原理以及如何使用它来优化分布式系统的数据传输。 ### 1. **Go-Netlog 的核心特性** - **轻量级设计**:Go-Netlog 设计简洁,资源消耗低,适合在资源有限的环境...

    监视网络联接的程序,并且将获得的信息保存到一个Access数据库中

    - `netLog.mdb` 是Access数据库文件,用于存储网络监控得到的数据。 - `MSSCCPRJ.SCC` 是版本控制文件,可能表明这个项目使用了某种源代码控制系统,如Visual SourceSafe。 - `Project1.vbp` 是Visual Basic工程文件...

    netlog 使用手册

    - **电影录制**:说明了如何录制模型运行过程为视频文件。 - **视角调整**:介绍了如何改变视图的视角。 - **绘画功能**:提供了绘制功能的使用方法。 - **拓扑结构**:讲解了如何定义和使用拓扑结构。 - **链**:...

    NetLog.rar

    在`NetLog`这个项目中,很可能包含了实现这些功能的C#代码。开发者可以通过阅读代码,了解如何实现上述的各个功能点,例如如何设置日志级别,如何进行线程安全的控制,以及如何高效地处理大量日志。通过这个例子,...

    监视网络联接的程序,并且将获得的信息保存到一个Access数据库中。(11KB)...

    在本场景中,监控程序收集到的数据将被存储在名为“netLog.mdb”的Access数据库文件中。这种设计不仅满足了对数据存储的需求,也使得用户能够通过Access提供的功能,方便地进行数据查询和报表生成。数据项可能包括...

    Netlog 音乐工具-网页跟随播放器

    打开网页的音乐后,就是从该网页退出,该播放器仍然在播,不受影响。

    netlog.exe

    可以看到RTL芯片的光猫的串口打印的telnet工具。集成log会话保存功能。用于RTL光猫问题定位

    Chromium NetLog dump viewer-crx插件

    net-Internals事件查看器和相关功能已从Chrome中删除,因此此扩展名可以显示NetLog转储 使用chrome创建:// net-export 原始项目: https://chromium.googlesource.com/catapult/+/master/netlog_viewer/

    Netlog-开源

    在压缩包文件"netlog-0.6"中,我们可以期待找到Netlog的0.6版本源代码和其他相关文件,如安装指南、配置示例、文档等。这些资源将帮助用户更好地理解和使用Netlog。安装通常包括编译源代码、配置参数以及启动服务等...

    DCBI 2009安装指导手册

    - 文档还提供了一些 Netlog 在安装和使用过程中可能出现的问题及其解决方案。 #### 综合知识点总结 - **操作系统安装**: - 选择合适的组件以满足 DCBI 的运行需求。 - 调整设置以优化性能和安全性。 - **MySQL ...

    asp.netLog4(日志)

    在现代软件开发过程中,日志记录是一项至关重要的任务。它可以帮助开发者追踪错误、调试程序、优化性能以及进行安全审计等。对于.NET应用程序而言,Log4Net是一个非常强大且成熟的日志记录框架。本文将详细介绍如何...

    2018_DCBI_配置结果1

    在【标题】"2018_DCBI_配置结果1"中,提到了在DCBI-netlog上的配置工作,主要分为以下几个部分: 1. **旁路部署模式**:这是一种常见的网络设备部署方式,DCBI设备被设置在主网络路径的一侧,不直接参与数据传输,...

    NetLog Client-开源

    2. **日志记录系统**: NetLog Client的核心功能是处理和显示日志记录信息,这在软件开发和维护中至关重要。它支持log4net的UdpAppender,这是一个用于发送日志数据到UDP端口的模块。log4net是Apache软件基金会的一个...

    Cronet-Quic-Log-Analytics

    但是通过netlog-viewer( )读取日志很痛苦,因此我决定制作自己的工具来加快该过程。 通过此工具,您可以 读取数据包/帧/流级别的cronet日志,每个数据包都将用重要信息(例如ack_delay,if_lost等)以及数据包...

    MMM

    如果你想在NetTango编辑器中打开并编辑这个项目,你需要确保已经安装了NetTango,并将`blocks.ntjson`文件导入到编辑器中。在NetTango中,你可以可视化地修改模型,这对于教学和初学者来说特别友好。 尽管标签为...

Global site tag (gtag.js) - Google Analytics