热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

web嵌入应用程序_我从在嵌入式键值存储上构建3个高流量Web应用程序中学到了什么。...

web嵌入应用程序作为一种时尚,我长大了,所有的Web应用程序都必须建立在正确的体系结构上,通常涉及经过良好测试和稳定的sql数据库&#x

web嵌入应用程序

作为一种时尚,我长大了,所有的Web应用程序都必须建立在正确的体系结构上,通常涉及经过良好测试和稳定的sql数据库,如postgres,或者在某些情况下涉及nosql数据库,如mongodb。 原因很简单:

  • 它们可以缩放,缩放和缩放。 当您的应用程序在一夜之间达到最初的10亿用户时,这一点非常重要。
  • SQL是访问数据的最佳方法。 而且,您始终需要一个复杂的消息层来访问该数据。
  • 如果不使用sql,将如何执行联接? 您将如何构建复杂的搜索? 您如何防止代码变得如此复杂以至于掉下来并杀死您的猫?
您的猫害怕您的代码。
  • 为什么在不需要聘请经验丰富的数据库管理员来创建复杂的架构并执行非常重要和复杂的数据库维护任务的应用程序中构建应用程序。

在2015年,我偶然发现了golang BoltDB数据库库 ,并首先用于在基本服务器端应用程序中保存状态。 然后我偶然发现了blevesearch ,它突然降临在我身上。 大多数数据库提供的最基本的功能是存储,以及对已存储数据的灵活搜索。 使用boltdb,我可以高效地存储数据,并且可以使用bleve,以有趣的方式搜索和访问数据。

blevesearch

在此基础上,我仅在boltDB和blevesearch上构建并启动了Calabar Yellow Pages ,然后当我看到它在生产中的运行和扩展的顺利程度时,我继续在badge DB(A上)构建Shop440 (Shopify和Aliexpress的合并)。比boltdb更快的替代方法)和blevesearch进行索引。

我学到了什么:

关键价值商店快速

首先,NoSQL键值存储速度快,比可比的关系数据库快得多。 它的速度来自其简单性。 键值数据库使用一个主键存储数据记录。 密钥意味着记录是唯一可识别的,并且可以直接访问。 除此之外,由开发人员来设计访问数据的更多复杂性。

另外,由于我使用的键值存储是嵌入式数据库,因此我能够进行一些已建立的数据库附带的处理。 在像mongoDB这样的数据库中, 大量的资源和等待时间用于序列化数据并将其通过电线传递给客户端应用程序,然后由客户端对应用程序进行反序列化和解码 。 这是浪费资源,尤其是当客户端和数据库在同一服务器上运行时,而不是在单独的服务器上运行时,它们将从HTTP通讯中受益。 嵌入式数据库消除了所有这些额外的序列化甚至tcp传输成本。

出色的可扩展性-一致性如何?

其次,NoSQL键值数据库也是高度可伸缩的。 这也是其简单性的功能。 与关系数据库不同,NoSQL键值数据库没有义务垂直扩展。 它可以在多个机器或设备上扩展几个数量级,而无需进行重大的重新设计。 在财务上,这也是一个很大的优势。

但就我而言,由于使用嵌入式键值存储,因此大多数扩展都是垂直发生的,甚至持续了很长时间。 目前,即使数据库大小接近TB,应用程序仍然保持强大的性能。 有了badge,我想到了拥有多个multiple数据库的策略,每个数据库代表一个集合。 这样,如果我需要将系统扩展到单个服务器之外,就可以将每个单独的数据库及其相应的程序逻辑隔离到一个单独的微服务中。 (我将在以后写更多有关此的内容。)

省时省力

扩展关系数据库解决方案通常意味着成本成比例增加。 它还需要时间和精力(以及服务器停机)来更改数据库架构。 相比之下,键值数据库使价格曲线保持线性而不是指数,并且设计为无需任何预定义架构即可处理数据。 某些(不是全部)键值数据库(如其他NoSQL数据库)也设计用于“ 最终一致性 ”。 这意味着数据“在某个时刻”在不同计算机上的副本之间同步,但不是立即同步。

无模式行和列

嵌入式键值存储的案例

根据https://www.sqlite.org/whentouse.html

对于大多数中低流量的网站(也就是说,大多数网站),SQLite可以很好地用作数据库引擎。 SQLite可以处理的网络流量取决于网站使用其数据库的程度。 一般来说,任何每天点击量少于10万的网站都可以在SQLite上正常运行。 每天10万次点击是一个保守的估计,而不是一个硬上限。 SQLite已被证明可以处理10倍的流量。
当然,SQLite网站( https://www.sqlite.org/ )使用SQLite本身,截至撰写本文(2015)时,它每天处理约400K至500K HTTP请求,其中约15–20%是动态的页面接触数据库。 每个网页的动态内容使用大约200条SQL语句 。 此设置在单个VM上运行,该VM与23个虚拟机共享一个物理服务器,但大多数情况下仍将平均负载保持在0.1以下。

大多数嵌入式密钥值存储区(例如badge)比sqlite的效率和性能要高得多,因此这可以证明,如果sqlite每天可以处理如此多的点击,则嵌入式密钥值存储区还可以提供更多的功能。

此外,在嵌入式语言索引值存储(如Blevesearch)和嵌入式索引引擎(如Blevesearch)和Golang等编译语言中使用 ,意味着您可以真正部署单个二进制文件,而无需外部依赖项,也不需要后期部署设置。

简而言之

嵌入式键值存储为您提供了nosql 数据库的所有优点,但是缺少它的地方是在搜索中,因为您只能通过其键和键的前缀来查询项目。 但是,当与诸如golang中的blevesearch或elasicsearch和lucene的索引引擎配对时,该配对将以非常节省资源的包为您提供功能强大的数据库,具有全文搜索,基于位置的搜索等功能,并且可以很好地扩展。

我相信这对服务器应该比目前实际拥有更多的知名度,并且在减少服务器费用方面要花很长的时间,尤其是对于那些从未期望过Facebook级规模的应用程序。

翻译自: https://hackernoon.com/what-i-learnt-from-building-3-high-traffic-web-applications-on-an-embedded-key-value-store-68d47249774f

web嵌入应用程序



推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
只属于天天的牛牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有