当前位置: 首页 > 知识库问答 >
问题:

表定义/分区/建模

蒯硕
2023-03-14

每个最终用户都与站点进行交互:查看产品、将产品添加到购物车和购买产品(我们称之为用户事件)。我想存储最近30天(或180天,如果可能的话)的活动。

需要考虑的事情:

>

  • 站点大小不同!我们有一些“重”网站有10M的最终用户,但我们也有一些“轻”网站有几百/几千个用户。
  • 事件没有唯一的ID。
  • 用户一次可以有多个事件,例如,他们可以查看包含多个产品的页面(但为了简化,我们可以不受此限制)。
  • 粗略估计:100个客户x 1000万最终用户x 100个交互=100,000,000,000行(每月)
  • 实时写入(当事件到达服务器时)。读操作要少得多(占事件的1%)。
  • 事件有更多的元数据和不同的事件(查看/购买/..)具有不同的元数据。
  • 使用Keyspace在站点之间进行分隔,并管理每个站点的表和一个表中的所有客户。
  • 这里怎么定义键?

    +--------+---------+------------+-----------+-----------+-----------+
    | siteId | userId  | timestamp  | eventType | productId | other ... |
    +--------+---------+------------+-----------+-----------+-----------+
    |      1 | Value 2 | 1501234567 | view      | abc       |           |
    |      1 | cols    | 1501234568 | purchase  | abc       |           |
    +--------+---------+------------+-----------+-----------+-----------+
    
  • 共有1个答案

    巫化
    2023-03-14

    我的查询是:获取特定用户的所有事件(及其元数据)。正如我上面所假设的,大约有100个事件。

    因此,您需要给定用户的所有事件。由于每个用户在站点上都有唯一的id,因此可以使用useridsite_id作为主键,并使用timestamp作为集群键来形成表。下面是表结构:

        CREATE TABLE user_events_by_time (
             userid bigint,
             timestamp timestamp,
             event_type text,
             product_id bigint,
             site_id bigint,
             PRIMARY KEY ((site_id,userid), timestamp)
        ) WITH CLUSTERING ORDER BY (timestamp DESC) ;
    

    现在,您可以使用以下查询查询给定时间内用户的所有事件:

    SELECT * from user_events_by_time WHERE site_id= <site_id> and userid = <user_id> and timestamp > <from_time> and timestamp < <to_time>;
    
     类似资料:
    • 我正在实现一个自定义消费者的主题/分区分配在Kafka。为此,我将重写抽象类,该类又实现接口。 作为自定义赋值器的一部分,我希望发送一个关于消费者订阅的每个主题的每个分区的单个(浮动)信息。 我知道可以通过重写接口的默认方法向赋值器发送自定义数据。 但是,问题是,从上面的方法签名中,我无法获得为使用者注册的每个主题分配给带下划线使用者的分区列表。 谢谢你。

    • 我试图处理的用例如下: 我们有一个来自Kafka的数据流 所以举个例子: 让我们假设所有消息都是表示编码数据的字节数组 编码数据中具有特定值的所有消息都应由一个操作员处理 这样,当我们接收到与相同值对应的特定消息时,这些消息可以作为状态存储在操作符上(在分区器之后),并可用于丰富后续消息 问题: 自定义分区程序会对此有所帮助吗 如果不是,那么什么是一个好的解决方案 有人可以在Flink中为数据流共

    • 创建几个objects可以让我们避免表名列名拼写错误、重复等。我们需要两个表:一个用来保存城市的信息,另一个用来保存某天的天气预报。第二张表会有一个关联到第一张表的字段。 CityForecastTable提供了表的名字还有需要列:一个id(这个城市的zipCode),城市的名称和所在国家。 object CityForecastTable { val NAME = "CityForeca

    • 我正在使用智能表插件进行分页。 我的要求是-我从数据库中获取100条记录,同时加载,每页记录为10条。所以,分页的页数将是10页。 现在,我想当我点击第10页时(从分页),然后我想从数据库中获取另外100条记录

    • 我试图创建一个位于两个单元格之间的UILabel,就像表格分隔符的显示方式一样。 Swift在UITableView的内置函数中允许这样做吗? 我该怎么做呢?

    • 现在,当我执行这个查询时: 请帮助我 1。既然分区不在ITEM_COLOR列上,Oracle将如何确定要转到哪个分区? 2。上面的查询不会从分区中受益吗? 3。SQL查询是否需要在WHERE子句中包含分区列,以便从分区中受益。 4。在分区的情况下如何使用索引?