我们的系统中存在用户可以查看和“关闭”报告的情况。关闭它之后,报告将移动到数据库内的临时表中,并保存24小时,然后移动到存档表(报告将存储在未来7年)。在7年期间的任何时候,用户都可以“重新打开”报告并对其进行处理。问题是档案存储变得越来越大,查找/重新开放报告往往很耗时。我需要不时得到档案的统计数据(即报告日期,客户,平均长度“打开”等)。我想使用大数据方法,但我不确定是使用Hadoop,Cassandra还是其他什么?有人可以为我提供一些指导如何开始并决定使用什么?
答案 0 :(得分:0)
如果您的档案很大并且您想从中获取报告,那么您将无法使用Cassandra,因为它没有简单的方法来汇总数据。您将最终在同一节点上并置Hadoop和Cassandra。
根据我的经验,如果您有大量的写入(我们已经尝试将其用于备份系统的后端),那么对于Cassandra而言,归档(一次写入 - 读取多次)并不是最好的用例。根据您的压缩策略,您可以在空间或iops中支付费用。添加的更改通过SSTable层次结构传播,导致写入比原始更改多得多。
在不知道其他变量的情况下,无法完整回答您的问题:您要分配多少硬件(服务器,它们的ram / cpu / hdd / ssd)?每个'报告的大小是多少?条目?您每天通常服务的读/写次数是多少?您的档案存储现在有多大?
答案 1 :(得分:0)
Cassandra可能会正常工作。保留两个表,报告和reports_archive。使用24小时和7年的TTL定义架构:
CREATE TABLE reports (
...
) WITH default_time_to_live = 86400;
CREATE TABLE reports_archive (
...
) WITH default_time_to_live = 86400 * 365 * 7;
使用新的时间窗口压缩策略(TWCS)来最小化写入放大。存储报告元数据并将二进制数据报告在单独的表中可能是有利的。
对于汇总分析,请使用Spark和Cassandra。您没有提到数据的大小,但粗略地说每个Cassandra节点1-3 TB应该可以正常工作。使用RF = 3,您至少需要三个节点。