【问题标题】:Postgres Hstore vs. Redis - performance wisePostgres Hstore 与 Redis - 性能方面
【发布时间】:2012-02-05 21:23:40
【问题描述】:

read aboutHStores in Postgres 也是 Redis 提供的东西。

我们的应用程序是用 NodeJS 编写的。两个问题:

  • 在性能方面,Postgres HStore 是否与 Redis 相媲美?

  • 对于会话存储,您会推荐什么——Redis 或具有其他某种数据类型的 Postgres(如 HStore,甚至可能是通常的关系表)?一种选择与另一种相比有多糟糕?

另一个限制是,我们需要使用 PostgreSQL 中已经存在的数据并将其与活动会话(如果在 Redis 或 PostgreSQL 中,我们现在不确定存储在哪里)。

根据我们的阅读,有人指出我们使用 Redis 作为 Session 管理器,但由于 PostgreSQL 的限制,我们不确定如何将两者结合起来以及可能出现的性能问题。

谢谢!

【问题讨论】:

    标签: performance postgresql node.js redis key-value-store


    【解决方案1】:

    Redis 将比 Postgres 更快,因为 Pg 为您的数据提供可靠性保证(当事务提交时,它保证在磁盘上),而 Redis 有一个在需要时写入磁盘的概念,所以应该'不用于关键数据。

    Redis 似乎是您的会话数据的好选择,或者甚至存储在 cookie 或客户端 Javascript 中。但是,如果您在每次请求时都需要数据库中的数据,那么可能甚至不值得使用 Redis。这在很大程度上取决于您的应用程序。

    【讨论】:

    • 只是一点评论:如果您不需要 Postgres 的可靠性保证(在崩溃的情况下丢失事务的风险,但在崩溃的情况下没有数据损坏的风险)并且速度更对您很重要,您可能需要测试关闭 postgres 中的 'synchronous_commit' 设置。这可能有助于大量的小写入,但对读取没有帮助。
    • Redis 有事务,但保证是整个事务集操作都提交到内存中。还有数据写入磁盘频率的配置选项。
    • 我终于明白Redis是一个全新的数据库整体概念。如此新,以至于很多人——像我——一开始并不理解它。当您习惯了 Postgres 时,真正掌握 Redis 确实需要时间。这是一个真正的当代数据库。说它只是一个 cookie/session 存储是低估了 Redis。如此新,以至于许多人在不知道的情况下就发表了意见。我们在非 Web 项目中使用它作为数百万数据的数据库,它做得很好!谈到可靠性,世界上没有任何软件是 100% 可靠的,即使是 Postgres。
    • 我们用实际数据证明这一点:norman-lm-fung.medium.com/…
    • 一行样本大小:对于 SAMPLE_SIZE = 1,_publishToRedis 占用 0:00:00.024909 _对于 SAMPLE_SIZE = 1,_saveToPostgres 占用 0:00:00.475719 样本大小一百万行:_publishToRedis 对于 SAMPLE_SIZE 占用 0:00:00.064457 = 1000000 _saveToPostgres 为 SAMPLE_SIZE = 1000000 占用了 0:00:32.407136
    【解决方案2】:

    使用 PostgreSQL 作为会话管理器通常是个坏主意。

    对于早于 9.1 的版本是基于持久媒体参数的每秒事务物理限制。对于会话管理,您通常不需要 MGA(因为没有冲突),这意味着 MGA 是开销,没有 MGA 和 ACID 的数据库必须明显更快(10 或 100)。

    我知道一个用例,其中 PostgreSQL 用于会话管理,性能非常糟糕且不稳定 - 它是 eshop,有大约 10000 个活动会话。将会话管理移至 memcached 后,性能和稳定性显着提高。 PostgreSQL 可以用于 100 个活动会话可能没有问题。对于更高的数字,有更好的工具。

    【讨论】:

    • 谢谢!我们实际上倾向于使用 redis,但如上所述,我们不确定如何查询 postgres 以返回 redis 中活跃用户的信息……有什么提示吗?
    • 您可以使用 memcache 代替 redis 进行会话处理。它工作得很好github.com/elbart/node-memcache
    • @MarekTuchalski 嗨!抱歉耽搁了,感谢您的回答。我的问题仍然存在......我如何将数据从 memcached 连接到 postgres?我必须遍历所有结果并将它们传递给 postgres 对吗?听起来很痛苦……
    • 请解释为什么 PostgreSQL 对会话管理器来说是一个糟糕的选择。在某些情况下使用它是有意义的吗?
    • 会话管理器不需要事务支持 - 更改不应该是持久的 - 但 PostgreSQL 不能在没有事务的情况下工作(9.1 提供更便宜的 UNLOGGED 表)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多