【发布时间】:2018-03-18 18:29:21
【问题描述】:
我正在设计一个短链接服务。当人们点击我的一个短链接时,我想收集一些数据,如 ip 地址、用户代理等,然后将它们转发到他们的目的地。如果我的链接表增长到数千万,那么存储这些数据的最佳方式是什么。我不确定是否使用弹性搜索之类的 sql。
【问题讨论】:
标签: sql elasticsearch
我正在设计一个短链接服务。当人们点击我的一个短链接时,我想收集一些数据,如 ip 地址、用户代理等,然后将它们转发到他们的目的地。如果我的链接表增长到数千万,那么存储这些数据的最佳方式是什么。我不确定是否使用弹性搜索之类的 sql。
【问题讨论】:
标签: sql elasticsearch
这是一个相当基于意见的问题,但我会尽力回答。 您的操作性能主要取决于您将要进行的查询类型。所以真正的问题是你想用这些数据做什么?处理大量数据时的一些概念如下:
如果您必须通过一个请求保存大量数据记录,RDBMS 和 elasticsearch 都为您提供了实现这一目标的方法。 (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
到目前为止一切顺利,让我们看看其他方面:
您的架构是否包含强预定义的复杂规则?
如果不是(我认为这是你的情况),你可以使用 elasticsearch。
您将来是否需要添加/删除字段到/从您的
现有架构?
Elasticsearch 更灵活地接受现有索引中的新字段 - 您实际上不需要做任何事情 - 在 RDMS 中您应该自己管理它 - 也就是更新表定义。
上述假设以及您希望在某些时候运行数据分析并将其可视化的假设使我得出结论,elasticsearch 可能更适合您的情况。使用kibana,您可以立即使用它。
注意事项:
1.我对给定的 RDBMS 链接使用 PostgreSQL,因为我对此很熟悉。
2.您还应该考虑 RDBMS 与 elasticsearch 的 Scalability。
【讨论】: