首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

慢的不是 Ruby,而是你的数据库

写入关系数据库始终是个难题:只能垂直扩展,即增加更强大的数据库服务器。至于查询(读取)方面,可以通过增加复杂性来解决:读取副本(曾称为 “从属”)。几乎所有常见的关系数据库服务器都支持此方法。...我曾在一个拥有百万级用户的应用程序中,导致数据库服务器集群崩溃:原因在于一个无关控制器的简单更改,使 Rails 切换到一个外部连接,该连接具有巨大物化视图,本不应以这种方式连接(用于报告)。...我开发的 Rails 应用程序数量惊人,其中包含某种形式的 .sort(params[:sort by]):仅在 2021 年,我就开发了三个独立的 Rails 应用程序,所有这些应用程序都可以通过使用...未优化的连接。添加简单的 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重的查询。一旦通过应用程序引入和传播,这几乎不可能解决。...而且它会查询五个连接表并且连接到至少一个索引上,而这个索引并不是为此准备的。导致大约 800 毫秒的查询。在每次页面加载时。 未优化的 where、group 和 order 调用。

15130

如何在Ubuntu 14.04上使用PostgreSQL和Ruby on Rails应用程序

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 安装PostgreSQL 如果您还没有安装PostgreSQL,那么现在就开始吧。...现在您可以输入以下命令退出PostgreSQL控制台: \q 我们现在创建一个Rails应用程序。 创建新的Rails应用程序 在主目录中创建一个新的Rails应用程序。...如果您的Rails应用程序位于远程服务器上,并且您希望通过Web浏览器访问它,则一种简单的方法是将其绑定到服务器的公共IP地址。...首先,查找服务器的公共IP地址,然后将其与rails server命令一起使用(将其替换为突出显示的部分): rails server --binding=server_public_IP 现在,您应该能够通过端口...,您的应用程序已正确配置,并连接到PostgreSQL数据库。

3.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    15 分钟掌握 15 个 Docker 小窍门

    10.基于命令行的瘦客户端,使用UNIX Socket和Docker后台服务的REST接口进行通信 Docker默认是用UNIX socket通信的,一直到大概0.5、0.6的版本还是用端口来通信,但现在则改成...下面我们来搞点有趣的事情,从主机链接到docker的UNIX socket: # 像HTTP客户端一样连接到UNIX socket $ nc -U / /var/run/docker.sock 连接成功后...对我来说,Docker源文件中,有4个是我非常喜欢阅读的: commands.go docker的命令行接口,是对REST API的一个轻量级封装。...Docker是怎么实现的?!我无法理解!”没关系,Docker是开源软件,去看它的源代码就可以了。如果你不太清楚Dockerfile中的命令是怎么回事,直接去看buildfile.go就明白了。...rails的程序:一个容器可以访问数据库容器而不对外暴露其他接口。

    1.8K50

    自建 Gitlab (邮箱配置、拆分 PostgreSQL、Redis) + 随想

    ' 接着使用以下命令让配置生效: gitlab-ctl reconfigure gitlab-ctl restart 最后就可以进入 gitlab 控制台测试发送邮件: gitlab-rails console...postgreSQL 默认的用户名、密码、初始数据库都是 postgres,可以通过设置环境变量更改默认配置: environment: - POSTGRES_PASSWORD=mysecretpassword...也许这辈子都不会用到使用 HTTP 去 clone 代码,但哥哥就是受不了这个提示,一想起来就头皮发麻,宛如被一万头草泥马来回碾压。 这个小问题让我吃不香,睡不着,都胖了好几斤,我必须要解决他。...然后,我不知道当时的状态是不是已经已经在阿鼻地狱的边缘,我最开始想到的是从源代码中去寻找这个提示的逻辑,强行改成 HTTPS(失败);注入一段 js 去修改提示(有修改的延迟,仍然无法忍受);修改 nginx...不知道有多少人会像我一样常常被 “自己” 掣肘,在内心层面我不算是一个很宅的人,我不喜欢呆在家里,我总是和很多人谈诗和远方,但,只局限于谈。

    2.3K60

    如何优雅使用Docker?请收下这15个小技巧。

    Tip10 基于命令行的瘦客户端,使用UNIX Socket和Docker后台服务的REST接口进行通信。...下面我们来搞点有趣的事情,从主机链接到docker的UNIX socket: # 像HTTP客户端一样连接到UNIX socket $ nc -U / /var/run/docker.sock 连接成功后...对我来说,Docker源文件中,有4个是我非常喜欢阅读的: commands.go docker的命令行接口,是对REST API的一个轻量级封装。...Docker是怎么实现的?!我无法理解!”没关系,Docker是开源软件,去看它的源代码就可以了。如果你不太清楚Dockerfile中的命令是怎么回事,直接去看buildfile.go就明白了。...rails的程序:一个容器可以访问数据库容器而不对外暴露其他接口。

    1.1K30

    Citus 11 官方手册脑图 - PostgreSQL 超大规模分布式数据库解决方案上手指南

    无法接收查询结果 解决方法 取消事务,因为它涉及分布式死锁 解决方法 无法连接到服务器:无法分配请求的地址 解决方法 SSL 错误:证书验证失败 解决方法 无法连接到任何活动的放置 解决方法 剩余的连接槽保留给非复制超级用户连接...解决方法 PgBouncer 无法连接到服务器 解决方法 关系 foo 没有被分发 解决方法 不支持的子句类型 解决方法 在事务中执行第一个修改命令后,无法打开新连接 解决方法 无法创建唯一性约束 解决方法...函数 create_distributed_table 不存在 解决方法 不能使用列引用调用 UPDATE 查询中使用的 STABLE 函数 解决方法 FAQ 常见问题 我可以在分布式表上创建主键吗...如果工作节点的地址发生变化怎么办? 哪个分片包含特定租户的数据? 我忘记了表的分布列,如何找到? 我可以通过多个键分发表吗? 为什么 pg_relation_size 报告分布式表的零字节?...上的分布式外连接如何工作 Citus 的分布式外连接 使用 Postgres 设计 SaaS 数据库以实现扩展 使用 Citus 扩展构建可扩展的 Postgres 指标后端 时间序列指标 事件 使用

    4.4K30

    激荡二十年:HTTP API 的变迁

    低代码的概念其实一直挺模糊,但大家的共识是:用户可以无需太多编码,通过「描述」其需求(可以在 GUI 上操作,也可以是撰写某种简单易懂的 schema),就能够构建完全可使用的应用软件。...我希望通过 x-fields 和 x-filter 这两个 HTTP 头,来实现 postgREST 里 querystring 所表达的内容: 对于 x-fields,它有略微复杂的,但继承自 postgREST...这里 source 我使用 webassembly,并不是为了装 B,而是我希望这样的工具就像 postgREST 一样,你不需要,也无法对其二次开发。...本来这篇文章应该在上周末发表出来,可是我一时技痒,把周末可用的时间匀给了代码实现,于是我在撰写了(主要是通过 psql -E 偷师 psql 命令是如何查询的)上百行 SQL,从postgres 中获取关于...也许在不久的将来,我们可以通过数据的 schema,倒推出 API 的 schema,再进一步倒推出使用这些 API 的模板化的 UI 页面。

    1.8K30

    在Ubuntu 14.04上安装GitLab(Trusty Tahr)

    如果您的服务器可以托管自己的软件项目的话,服务器应该会拥有大容量的磁盘空间,因此请考虑使用我们的区块存储服务进行服务器的磁盘设置。 注意 本指南是为非root用户编写的。...尝试使用新建用户连接到新建数据库并显示PostgreSQL版本,以方便测试: sudo -u git -H psql -d gitlabhq_production -c "SELECT VERSION...一般来说,我们可以随意选择其他稳定分支,但永远不要在生产服务器上安装主干。...保护GitLab 现在您已在服务器上运行GitLab,您可能希望添加SSL支持以保护您的GitLab站点。请参阅Nginx的SSL证书配置的指南,这样您就可以使用SSL保护您的站点了。...更多信息 有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

    2.2K10

    我被 pgx 及其背后的 Rust 美学征服

    打个 90 后开发者可能无法理解的比喻,用 Rust (pgx) 之于 C 撰写 postgres extension,就好比用 VB 之于 MFC 编写 windows 应用,或者用 rails 之于...自增 ID 缺乏随机性,且会暴露数据细节(黑客可以通过 id 的规律爬到大量数据);UUID4 具备足够随机性,但无法排序。...更方便地定义 postgres 数据类型? 接下来我们来个更加震撼的:通过 pgx 和 serde,你可以很方便地将 Rust 类型映射到 Postgres 类型。...甚至,你可以在 Postgres 服务器内部向外发送 HTTP 请求(WTF),或者读写文档(WTF)。...过去 10-20 年,随着 rails / django / phoenix 这样的胖 web 框架的崛起,使得我们沉迷于数据层使用 ORM 带来的「巨大好处」:数据库无关 —— 你只需要改改配置,就可以

    1.3K20

    如何使用 psql 列出 PostgreSQL 数据库和表

    在管理PostgreSQL数据库服务器时,您可能要执行的最常见任务之一就是列出数据库及其表。 PostgreSQL附带了一个名为psql的交互式工具,允许您连接到服务器并对其运行查询。...在使用psql时,还可以利用它的元命令。这些命令对于脚本编写和命令行管理非常有用。所有元命令都以非引号反斜杠开头,也称为反斜杠命令。...本教程解释如何使用psql在PostgreSQL服务器中显示数据库和表。 列出数据库 您可以使用该 psql 命令以任何系统用户身份连接到 PostgreSQL 服务器。...安装 PostgreSQL 软件包后,将创建名为 “postgres” 的管理用户。默认情况下,此用户可以在没有密码的情况下连接到本地 PostgreSQL 服务器。...前两个是创建新数据库时使用的模板。 如果要获取有关数据库大小,默认表空间和描述的信息,请使用 \l+ 或 \list+ 。仅当当前用户可以连接到数据库时,才会显示数据库大小。

    4.2K10

    如何在Debian 9上安装PostgreSQL

    要验证安装,我们将使用psql实用程序连接到PostgreSQL数据库服务器并打印服务器版本: sudo -u postgres psql -c "SELECT version();" 输出内容:...最常用的方法是: 信任 - 使用此方法,只要满足pg_hba.conf中定义的条件,角色就可以在没有密码的情况下进行连接。 密码 - 角色可以通过提供密码进行连接。...密码可以存储为scram-sha-256 md5和密码(明文) Ident - 仅在TCP / IP连接上支持此方法。 通过获取客户端的操作系统用户名,使用可选的用户名映射来工作。...创建PostgreSQL角色和数据库 您可以使用createuser命令从命令行创建新角色。 只有具有CREATEROLE权限的超级用户和角色才能创建新角色。...最后一步是通过编辑pg_hba.conf文件将服务器配置为接受远程连接。

    2.6K20

    如何在Debian 8上安装和使用PostgreSQL 9.4

    除非另有说明,否则本教程中的所有命令都应作为具有sudo权限的非root用户运行。 没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...检查安装 要检查PostgreSQL服务器是否已正确安装并且正在运行,您可以使用ps命令: # ps -ef | grep postgre 你应该在终端上看到这样的东西: postgres 32164...要连接到数据库,首先需要在以root身份登录时通过发出以下命令切换到用户postgres(这不适用于sudo访问): su - postgres 你现在应该已经作为postgres登录。...因此,如果我有一个被调用的用户test1,该角色将尝试连接到默认调用的数据库test1。...要将Linux中的用户帐户更改为test1: su - test1 然后,使用以下命令以PostgreSQL角色test1连接到数据库test1: psql 现在您应该看到PostgreSQL提示与新创建的用户

    4.3K00

    如何在Ubuntu 16.04上安装PostgreSQL

    同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。...没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 创建标准用户帐户,加强SSH访问并删除不必要的网络服务。...警告 使用postgres的用户不应该被用于其他目的(例如,连接到其他网络)。这样做会对数据库的安全性造成严重威胁。...此步骤中设置的密码将用于通过网络连接到数据库。默认情况下,对等身份验证将用于本地连接。 创建数据库 以postgresLinux用户身份运行本节中的命令。...使用数据库时,可以使用\z命令检查每个表的访问权限。 更多信息 有关此主题的其他信息,您可能需要参考以下资源。虽然希望提供这些有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

    2.2K20

    【docker】给你的网站添加聊天对话框 | Chatwoot的部署与使用

    /root/data/docker_data/chatwoot cd /root/data/docker_data/chatwoot 创建环境配置文件: vim .env 贴入环境配置,具体环境变量的使用可以看官方的文档...剩下的都删了~ 必须要修改的: SECRET_KEY_BASE:可以在服务器上运行openssl rand -base64 32后,获得生成的随机字符串,然后贴入下面的环境变量中。...,但可以通过API注册 ENABLE_ACCOUNT_SIGNUP=false # Redis 配置 REDIS_URL=redis://redis:6379 # 设置REDIS的密码,建议复杂一点...反向代理 你需要完成反向代理并开启 SSL,具体为你的域名 -> 服务器IP:5678,反代可以参考下面两篇文章: 【docker】反向代理神器 ——Nginx Proxy Manager 的安装 【docker...使用 访问你的域名,就可以进入初始化界面。 注册完登录即可。

    22810

    GitLab 14 轻量化运行方案

    但如果你希望拥有类似 GitHub 的项目管理体验,并有私有化部署要求,GitLab 会是不二之选。 为了方便测试安装,我们使用上篇中提到的方式来快速初始化容器环境。...GitLab 默认提供了软件包仓库、容器仓库、软件依赖管理,这些可以使用我之前分享过的 《使用容器搭建简单可靠的容器仓库》一文中的 distribution,或者 Nexus 进行替代。...通过设置一些配置项,可以将 GitLab 中这些功能进行关闭。...在早些时候的《容器方式使用轻量的 GitLab 低版本》 一文中,我分享过如何使用低版本的 GitLab ,那篇文章中的 GitLab 的进程树状况如下。...(添加好友,请备注实名,注明来源和目的,否则不会通过审核) 关于折腾群入群的那些事 ---- 本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。

    3K40

    如何在Ubuntu 14.04上使用Git Hooks部署Rails应用程序

    使用Git hooks将允许您通过简单地将更改推送到生产服务器来部署应用程序,而不必手动拉动并执行诸如执行数据库迁移之类的操作。...没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 您需要在服务器上安装Ruby。...使用以下命令退出PostgreSQL控制台: \q 现在,我们已准备好使用正确的数据库连接信息配置您的应用程序。...' 现在让我们调整我们的应用程序,准备连接到我们的生产PostgreSQL数据库。...仅此一项就可以在项目的整个生命周期中为您节省大量时间。 本教程仅介绍了“post-receive”hook,但还有其他几种类型的挂钩可以帮助改善部署过程的自动化。

    2.5K60

    GitLab 14 轻量化运行方案

    但如果你希望拥有类似 GitHub 的项目管理体验,并有私有化部署要求,GitLab 会是不二之选。 为了方便测试安装,我们使用上篇中提到的方式来快速初始化容器环境。...GitLab 默认提供了软件包仓库、容器仓库、软件依赖管理,这些可以使用我之前分享过的 《使用容器搭建简单可靠的容器仓库》一文中的 distribution,或者 Nexus 进行替代。...通过设置一些配置项,可以将 GitLab 中这些功能进行关闭。...在早些时候的《容器方式使用轻量的 GitLab 低版本》 一文中,我分享过如何使用低版本的 GitLab ,那篇文章中的 GitLab 的进程树状况如下。...------ 本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。

    4.8K21

    如何在Ubuntu 16.04上安装和使用PostgreSQL

    没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...同样,您可以通过键入以下内容退出交互式Postgres会话: \q 创建一个新角色 目前,我们只是在数据库中配置了postgres角色。我们可以使用createrole命令从命令行创建新角色。...因此,如果在最后一节中,我们创建了一个名为sammy的用户,那么该角色将尝试连接到默认情况下也会调用的sammy数据库。您可以使用该createdb命令创建适当的数据库。...您必须从具有sudo权限的帐户(未以postgres用户身份登录)执行此操作: sudo adduser sammy 获得适当的帐户后,您可以通过键入以下内容切换并连接到数据库: sudo -i -u...如果您希望用户连接到其他数据库,可以通过指定数据库来执行此操作: psql -d postgres 登录后,您可以通过键入以下内容来检查当前的连接信息: \conninfo You are connected

    5.3K10
    领券