关系型数据库的性能扩展思路及NoSQL产品的选取标准
一、关系型数据库面对数据访问的压力,通常采取的解决方案步骤(以MySQL为例)1、主从复制,实现读写分离或分布读;2、读请求比较多,可添加缓存服务器,如Memca
一、关系型数据库面对数据访问的压力,通常采取的解决方案步骤(以MySQL为例)
1、主从复制,实现读写分离或分布读;
2、读请求比较多,可添加缓存服务器,如Memcached,以提升读性能;但此时得手动维护数据的一致性;
3、写请求较多的场景,可简单进行向上扩展,使用性能更强的服务器以应付更多的写请求;同时,为了保证从服务器跟得上主服务器的更新速度,可能需要从服务器使用与主服务器相同的配置;此法性价比不高;
4、数据访问压力进一步增大时,联结查询性能会急剧下降;此时就得进行“反模式”化设计,将表根据业务需求进行合并,以增大数据冗余来换取系统性能;
5、停用存储过程、存储函数或触发器等代码,将对应的功能在应用程序中完成;
6、删除表的各辅助索引,美国空间,改写查询使其仅使用主键索引;
7、数据库切分(sharding);此法复杂度较大,维护成本较高;且数据规模再次提升时重新切分的成本高昂,二次扩展能力受限;
二、RDBMS与NoSQL
实际使用中,只要架构得当,关系型数据库完全能够服务于各种级别的数据存储应用,比如Facebook和Google各自有着运转良好的MySQL服务器集群服务于不同层次不同领域的数据存储场景。但此等规模的应用需要强大的技术实力突破各式各样的应用限制,这也会带来居高不下的维护成本,而且关系型数据库某些内生性的限制依然会成为应用中的梦魇。于是,近几年来,一些被归类为NoSQL的新项目或框架在多个组织或企业中雨后春笋般涌现。这些新项目或框架很少提供类似SQL语言一样的查询语言,而是提供了一种简化的、类API的数据访问接口。但RDBMS与NoSQL真正的不同之处在于低层,即存储级别,因为NoSQL通常不支持事务或辅助索引的功能等。
另一方面,NoSQL的著名项目中彼此间有许多功能是重叠的,甚至有不少特性与传统的关系型数据库的功能也存在相同之处,因此NoSQL算不上革命性的技术,尽管从工程师的眼下其绝对是革命性的。于是,现实中,memcached也被划归了NoSQL阵营,似乎不属于RDBMS的存储管理类程序都自然而然的属于NoSQL,NoSQL也因而成为了非RDBMS系统的“海纳百川”之地。然而,“有容乃大”就难免“鱼龙混杂”,为了便于理解,这里从多个维度来对NoSQL的主流技术进行简单的归类,以便对此能有个概括性的认识,并能够在实际应用场景中有个可以参照的选择标准。
1、数据模型
数据模型指数据的存储方式,香港虚拟主机,其有好几个流派,如关系、键值、列式、文档及图像等。在它们的各自实现中,关系型数据库有MySQL、PostgreSQL、Oracle等,键值数据库有memcached、membase、Riak、Redis等,美国服务器,列式数据库有HBase、Cassandra、Hypertable等,文档数据库有MongoDB、CouchDB等,图像数据库有Neo4J等。在选用某特定的NoSQL产品时,应该事先评估应用程序是如何访问数据的,以及数据的schema是否经常演进等。
2、存储模型
指数据存储是基于内存存储还是持久存储。
3、一致性模型
存储系统在何种级别实现数据一致性,严格一致性还是结果一致性?一致性的等级可能会对数据访问延迟带来巨大影响。
4、物理模型
在物理模型上可归类分布式存储及单机存储。对分布式存储而言,其扩展能力及易扩展性如何也是一个重要的衡量指标。
5、读/写性能
对于工作在不同应用场景中的应用程序而言,其读/写需求有着显著不同。而不同的NoSQL产品也有着不同的适用性。
6、辅助索引
辅助索引有助于实现在非主键字段上完成排序、查询操作等;有的NoSQL产品不提供此类功能。
7、故障处理
不同的应用场景其故障恢复的时间容忍度不同,而不同的NoSQL产品也故障恢复能力方面也有着不同的表现。
8、数据压缩
当存储TB级别的数据时,尤其是存储文本数据时,数据压缩可以大量节约存储空间。
9、负载均衡
分布式存储将用户的读/写请求分布于多个节点同时进行能够极大提升系统性能。
10、锁、等待和死锁
RDBMS的事务处理过程分为两个阶段,多用户并发访问的场景中,这将显著增加用户在访问资源时的等待时间,甚至会导致死锁。
三、数据一致性模型
概括来讲,数据一致性是指在应用程序访问时,数据的有效性(validity)、可用性(usability)、精确性(accuracy)及完整性(integrity)方面的表现,其用于保证在用户自身事务或其他用户的事务执行过程中,每个用户看到的数据是一致的。在各种场景中都有可能产生数据一致性问题,但提到的较多的通常有应用程序一致性、事务一致性和时间点一致性等。
在数据库上,每个操作都可能促使数据库从一种状态转换为另一种状态,但这种转换的实现方式或过程是非特定的,因此其有着多种不同的模型。不过,无论是基于哪种实现,其最终结果要么是转换为的状态,要么恢复回原有的状态以保证数据的一致性。根据数据库在保证数据一致性实现的严格程度来分,大致有如下几类:
严格一致性(strict)
数据的改变是原子性的并且会立即生效;这是最高级别的一致性实现;
顺序一致性(Sequential)
每个客户端以他们提交应用的次序看到数据的改变;
因果一致性(Causal)
因果关联的所有的改变,在所有的客户端以同样的次序获取;
结果一致性(Eventual)
当一段时间内没有更新发生时,所有更新会通过系统进行传播,最终所有的副本都是一致的;也即当事务完成时,必须使所有数据都具有一致的状态;
弱一致性(Weak)
不保证所有的更新都能通告给所有客户端,也不保证所有客户端都能以同样的次序获取数据更新;
其中,结果一致性还可以进一步细分为多种不同的子类别,而且有些子类还可以共存,亚马逊公司的现任CTO Werner Vogels在“Eventually Consistent一文中对此有详细阐述。在文中,他还提出了CAP定理,并借此指出,一个分布式系统仅能同时实现一致性、可用性和分区容错错(partition tolerance)三种属性中的两种。
本文出自 “马哥教育” 博客,转载请与作者联系!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

排序索引是 MongoDB 索引的一種,允許按特定字段對集合中的文檔排序。創建排序索引可以快速排序查詢結果,無需額外的排序操作。優勢包括快速排序、覆蓋查詢和按需排序。語法為 db.collection.createIndex({ field: <sort order> }),其中 <sort order> 為 1(升序)或 -1(降序)。還可以創建對多個字段進行排序的多字段排序索引。

提升Debian系统中PostgreSQL数据库性能,需要综合考虑硬件、配置、索引、查询等多个方面。以下策略能有效优化数据库性能:一、硬件资源优化内存扩容:充足的内存对于缓存数据和索引至关重要。高速存储:使用SSD固态硬盘可显著提升I/O性能。多核处理器:充分利用多核处理器实现查询并行处理。二、数据库参数调优shared_buffers:根据系统内存大小设置,建议设置为系统内存的25%-40%。work_mem:控制排序和哈希操作的内存,通常设置为64MB到256M

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信

要設置MongoDB數據庫,可以使用命令行(use和db.createCollection())或mongo Shell(mongo、use和db.createCollection())。其他設置選項包括查看數據庫(show dbs)、查看集合(show collections)、刪除數據庫(db.dropDatabase())、刪除集合(db.&lt;collection_name&gt;.drop())、插入文檔(db.&lt;collecti

Redis的關鍵特性包括速度、靈活性和豐富的數據結構支持。 1)速度:Redis作為內存數據庫,讀寫操作幾乎瞬時,適用於緩存和會話管理。 2)靈活性:支持多種數據結構,如字符串、列表、集合等,適用於復雜數據處理。 3)數據結構支持:提供字符串、列表、集合、哈希表等,適合不同業務需求。

MongoDB缺乏事務機制,導致其無法保證數據庫操作的原子性、一致性、隔離性和持久性。替代解決方案包括驗證和鎖定機制、分佈式事務協調器以及事務引擎。選擇替代解決方案時,應考慮其複雜性、性能和數據一致性要求。
