Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何结合spark和nosql数据库设计实时充电系统_Apache Spark_Cassandra_Spark Streaming_Cdr_Nosql - Fatal编程技术网

Apache spark 如何结合spark和nosql数据库设计实时充电系统

Apache spark 如何结合spark和nosql数据库设计实时充电系统,apache-spark,cassandra,spark-streaming,cdr,nosql,Apache Spark,Cassandra,Spark Streaming,Cdr,Nosql,我想设计一个系统 将读取CDR(呼叫数据记录)文件并将其插入 进入nosql数据库。为了实现这一点,Cassandra作为nosql的spark流看起来很有希望,因为文件将不断出现 将能够通过对持续时间和调用数进行评级来计算实时价格,如果是数据,则仅计算千字节,并存储当前billcycle到目前为止可计费的总金额。我需要一个nosql,我将插入额定cdr,并更新该cdr中msisdn当前billcycle到目前为止的可计费总量 如果针对特定订阅更新了费率计划,则对于当前billcycle,需要

我想设计一个系统

  • 将读取CDR(呼叫数据记录)文件并将其插入 进入nosql数据库。为了实现这一点,Cassandra作为nosql的spark流看起来很有希望,因为文件将不断出现
  • 将能够通过对持续时间和调用数进行评级来计算实时价格,如果是数据,则仅计算千字节,并存储当前billcycle到目前为止可计费的总金额。我需要一个nosql,我将插入额定cdr,并更新该cdr中msisdn当前billcycle到目前为止的可计费总量
  • 如果针对特定订阅更新了费率计划,则对于当前billcycle,需要重新计算使用该价格计划的所有CDR,并且需要为所有客户计算到目前为止的总金额
笔记:
  • MSISDN对于具有一对一关系的每个订阅都是唯一的。 一个月内,一个msisdn最多可以拥有100000个CDR
  • 到目前为止,我一直在浏览nosql数据库,我想 使用cassandra,但我仍然不确定如何设计数据库来 针对此业务案例进行优化
  • 请同时考虑在一个节点中处理一个CDR, 同一msisdn的其他cdr可以在另一个节点中处理 同时和两个节点执行上述逻辑
这个问题确实非常广泛——StackOverflow是一个旨在涵盖更具体的技术问题,而不是讨论整个系统的架构方面的问题

除此之外,让我试着谈谈你问题的一些方面:

a) 使用流媒体进行CDR处理:

Spark Streaming确实是传入CDR的首选工具,通常通过消息队列系统(如Kafka)交付。它允许窗口操作,当您需要在设定的时间段(小时、天等)内计算通话费用时,它非常方便。您可以非常轻松地将现有的静态记录(例如来自其他数据库的价格计划)与窗口操作中的传入CDR组合起来。所有这些都在一个健壮且扩展的API中实现

b) 使用卡桑德拉作为商店

Cassandra具有出色的扩展能力,可即时访问行-因此,它绝对是一个杀手。然而,在电信行业设置的情况下,除了MSISDN查找和信用检查之外,我会严肃地质疑是否使用它。Cassandra本质上是一个柱状KV存储,尝试存储多维的、本质上是关系型的记录,如价格计划、合同和批次,会让您非常头疼。我建议根据使用情况将数据存储在不同的存储中。这些可以是:

  • HDFS->CDR中的CDR原始记录可能非常丰富,如果您需要重新处理它们,从HDFS中收集它们将更加有效
  • Cassandra中的账单摘要->逐项账单摘要是最初由Spark Streaming处理的CDR结果。这些基本上是柱状的,可以完美地存储在卡桑德拉中
  • MSISDN和信用信息->如上所述,这也是Cassandra的一个完美用例
  • 价格计划->这些是多维的、更面向文档的,应该存储在支持这种结构的数据库中。您完全可以将Postgres与JSON结合使用,因为您不会期望更多的计划

最后,您实际上看到了一个经典的lambda用例,其中Spark Streaming用于即时处理传入的CDR,而批处理使用HDFS上的常规Spark进行后期处理,例如,当您在计划更改后重新计算CDR成本时。

作为建议,你的问题很广泛,应该结束了。请阅读以帮助您更好地撰写问题!