gpt4 book ai didi

nosql - 如何为我的用例选择正确的键值对存储?

转载 作者:行者123 更新时间:2023-12-03 16:20:37 29 4
gpt4 key购买 nike

我将描述数据和案例。

record {
customerId: "id", <---- indexed
binaryData: "data" <---- not indexed
}
期望:
  • customerId 是随机的 10 位数字
  • 二进制记录数据的平均大小 - 1-2 KB
  • 每个 customerId
  • 最多可以有 100 条记录
  • 记录总数 - 500M
  • 写入模式 #1:一次插入一条记录
  • 写入模式#2:批处理,可能是并行的,速度至少为每小时 20M 记录
  • 搜索模式 #1:按 customerId
  • 查找所有记录
  • 搜索模式 #2:按 customerId 组并行查找所有记录,速度至少为每小时 1000 万个 customerId
  • 数据不是太重要,我们可以用可靠性来换取速度
  • 我们假设在 AWS/GCP 中工作 - 最好我们的键值存储由云管理
  • 我们希望每月在此解决方案的云成本上花费不超过 1000 美元

  • 我们尝试过的:
    我们在 AWS RDS MariaDB 中的关系数据库中实现了这种方法。服务器是 32GB RAM,2TB GP2 SSD,8 个 CPU。我发现 IOPS 使用率很高,插入速度也不尽如人意。经过调查,我得出结论,由于 customerId 的随机性,对索引的不同写入率很高。在此之后,我做了以下事情:
  • 输入数据按 customerId ASC
  • 排序
  • 进行了额外的交易以减少索引大小,而单条记录读取速度几乎没有下降。为此,我做了一些存储桶,其中记录 1111111185 和 1111111186 转到相同的“存储桶”11111111。这样存储桶不能包含超过 100 个客户 ID,因此读取速度可以,并且写入速度会提高。

  • 即使这样,我每小时也无法进行超过 1-3M 的记录写入。测试了不同的写入并发,当前值为 4 个并发写入。在所有修改之后,我们还不清楚还有什么可以改进的:
  • IOPS 不是最高使用(每秒约 4K),
  • CPU使用率不高,
  • 网络未充分利用,
  • 写入和读取吞吐量没有上限。

  • 显然,ACID 原则阻碍了我们。我正在寻找可扩展的键值存储,很高兴听到任何想法和粗略估计。

    最佳答案

    所以如果我理解你...

  • 2kb * 500m 记录 ≈ 1 TB 数据
  • 20m 写入/小时 ≈ 5.5k 写入/秒

  • 这在 NoSQL 中是完全可行的。
    规模不是问题。这是你的成本。
    1 TB 数据每月 1000 美元听起来是一个合理的目标。我只是不认为公共(public)云是 相当还在那里。
    让我举一个我推荐的例子:Scylla Cloud 和 Scylla Open Source。 (披露:我为 ScyllaDB 工作。)
    我会提醒您,您每月 1,000 美元的成本费用可能会导致您考虑并做出一些权衡。
    与高可用性部署中的典型情况一样,为了确保节点故障时的数据冗余,您可以在 AWS 上使用 3 个 i3.2xlarge 实例(每个实例可以存储 1.9 TB)。
    您需要额外的容量来运行压缩。我们使用增量压缩,这可以节省空间放大,但您不想使用 i3.xlarge(每个 0.9 tb),除非真的需要成本,否则它低于 1 tb 的限制。在这种情况下,您必须进行某种数据驱逐(如 TTL)以将数据保持在 <600 gb 左右。
    即使 Scylla Cloud 的年度预留定价(参见此处: https://www.scylladb.com/product/scylla-cloud/#pricing)为 764.60 美元/服务器,运行三个 i3.2xlarge 也将是 2,293.80 美元/月。超过您预算的两倍。
    现在,如果您避开托管服务并希望运行自助服务,则可以使用 Scylla 开源,只需查看按需实例定价(参见此处: https://aws.amazon.com/ec2/pricing/on-demand/)。对于 3x i3.2xlarge,您的运行速度为每小时 0.624 美元。这是每个 449.28 美元的原始按需成本,其中不包括备份、数据传输等杂费。但您可以花 1,347.84 美元购买三个实例。开源。没有管理。
    仍然超出您的预算,但更接近。如果你能得到保留的价格,那可能就成功了。
    编辑:找到底价:
    3x i3.2xlarge 会让你付出代价
  • 按月定价 $312.44 x 3 = $937.32,或
  • 1 年预付费用每年 3,482 美元/12 = 290.17 美元/月/服务器 x 3 = 870.50 美元。

  • 因此,备份、监控和其他成本再次高于此。但是您应该能够使用 Scylla Open Source 使原始服务器成本 < 1,000 美元来满足您的需求。
    但是管理负担在您的团队身上(而且他们的时间并不是完全零成本)。
    例如,如果你想监控你的系统,你需要设置 Prometheus、Grafana 或 Datadog 之类的东西。那将是其他服务器或服务,它们不是免费的。 (我们团队的备份和监控成本由 Scylla Cloud 承担。该服务的一部分溢价。)
    另一种省钱的方法是只进行 2 次复制。如果您丢失服务器,这会将您的数据置于真正危险的地方。是 不推荐 .
    所有这些都是基于对您的数据的最大假设。你的记录都在 2k 左右(不是 1k)。你没有从 ScyllaDB 内置的数据压缩中获得太多效用 - 请参阅第一部分 ( https://www.scylladb.com/2019/10/04/compression-in-scylla-part-one/ ) 和第二部分 ( https://www.scylladb.com/2019/10/07/compression-in-scylla-part-two/ )。
    在我看来,如果你采用保留定价和开源的方式,你应该能够以 1000 美元/月的预算勉强度日。虽然增加监控和备份以及其他附带成本(我没有在这里计算)可能会让你再次回到这个数字之上。
    否则,完全托管的云企业套餐每月 230 美元,您可以在晚上轻松休眠。

    关于nosql - 如何为我的用例选择正确的键值对存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63598720/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com