【问题标题】:High read/write data storage高读/写数据存储
【发布时间】:2018-03-18 18:29:21
【问题描述】:

我正在设计一个短链接服务。当人们点击我的一个短链接时,我想收集一些数据,如 ip 地址、用户代理等,然后将它们转发到他们的目的地。如果我的链接表增长到数千万,那么存储这些数据的最佳方式是什么。我不确定是否使用弹性搜索之类的 sql。

【问题讨论】:

    标签: sql elasticsearch


    【解决方案1】:

    这是一个相当基于意见的问题,但我会尽力回答。 您的操作性能主要取决于您将要进行的查询类型。所以真正的问题是你想用这些数据做什么?处理大量数据时的一些概念如下:

    批量插入

    如果您必须通过一个请求保存大量数据记录,RDBMSelasticsearch 都为您提供了实现这一目标的方法。 (postgreSQL populate data, elasticsearch Bulk API)

    数据分区

    如果您处理大量数据,即不断变大,查询的执行时间会随着数据量的增加而增加。在某些时候,您可能会意识到,您需要申请 data partitioning

    使用 elasticsearch,您可以创建 time-based-indices:您可以将此“流量分析”保存到 2018-03-traffic、2018-04-traffic 等索引中。然后您可以参考使用aliases 以同一个名字发送给他们。请参考what-are-aliases-in-elasticsearch-for问题。 Postgres,它还为您提供table partitioning

    到目前为止一切顺利,让我们看看其他方面:

    数据结构

    1. 您的架构是否包含强预定义的复杂规则
      如果不是(我认为这是你的情况),你可以使用 elasticsearch。

    2. 您将来是否需要添加/删除字段到/从您的 现有架构?
      Elasticsearch 更灵活地接受现有索引中的新字段 - 您实际上不需要做任何事情 - 在 RDMS 中您应该自己管理它 - 也就是更新表定义。

    基于意见的结论

    上述假设以及您希望在某些时候运行数据分析并将其可视化的假设使我得出结论,elasticsearch 可能更适合您的情况。使用kibana,您可以立即使用它。

    注意事项:
    1.我对给定的 RDBMS 链接使用 PostgreSQL,因为我对此很熟悉。
    2.您还应该考虑 RDBMS 与 elasticsearch 的 Scalability

    【讨论】:

    • 非常感谢您或详细回答@Eirini。我主要关心的是减少搜索时间。我希望能够尽快从传入的 uri 中找到转发链接。
    • 这也取决于写入(如果您必须在读取的同时执行这些操作:)无论如何,如果您使用正确的索引和适当的系统调整,您可以通过两种选择来实现您的目标。我希望,我以某种方式提供了帮助
    猜你喜欢
    • 2012-09-04
    • 2020-08-06
    • 2018-08-04
    • 1970-01-01
    • 2012-07-28
    • 2012-08-14
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多