有谁知道是否有任何 YCSB 客户端/驱动程序可用于对 VoltDB 进行基准测试?甚至任何参考出版物/博客/文章/研究项目?
我们可以将 TPC 工作负载用于 VoltDB 基准测试吗?
非常感谢大家。
有谁知道是否有任何 YCSB 客户端/驱动程序可用于对 VoltDB 进行基准测试?甚至任何参考出版物/博客/文章/研究项目?
我们可以将 TPC 工作负载用于 VoltDB 基准测试吗?
非常感谢大家。
这里的另一位 VoltDB 开发人员,他刚刚完成了实现 YCSB 驱动程序的过程。此驱动程序的源代码可以在 GitHub 上找到,网址为https://github.com/VoltDB/voltdb/tree/master/tests/test_apps/ycsb。
关于我们的实现的一些细节:
YCSB 使用宽列格式,将字符串键映射到许多字符串二进制 k/v 字段映射。创建一个可以灵活处理这个问题的驱动程序,即一个可以处理任意 YCSB 配置的驱动程序,不允许直接使用固定的关系模式。为了解决这个问题,我们采用了一种“小地图”类型的方法,也就是说,对于每个键,我们将所有字段压缩到一个 blob 中,这样整个 YCSB 行都以 k/v 对处理。这确实做出了隐含(软)假设,即每行的字段数将相对较小(例如,<=50),考虑到现有的、已发布的 YCSB 结果,这似乎是合理的。可以在存储过程级别添加额外的逻辑来处理每行大量字段的情况,
作为进一步说明,我们将“扫描”操作解释为“从该键开始以某种确定的顺序翻阅数据”。在现实世界中,数据意味着某种东西,并且可能(或可能不)具有有意义的顺序。在 YCSB 的世界中,没有特别的理由偏爱一种订购方式而不是另一种订购方式。因此,我们对 VoltDB 分区进行人工排序;结合主键索引施加的分区内排序,这对数据集施加了总排序。对于感兴趣的读者,此操作的客户端实现使用了我们的一些示例中使用的“到处运行”模式的一些新颖的变体。
我们发布的测试结果可以在https://voltdb.com/blog/voltdb-in-memory-database-achieves-best-in-class-results-running-in-the-cloud-on-the-上看到ycsb-benchmark-3/ . 正如我的同事在上面所建议的那样,虽然这个基准测试的结果非常强大,但实际上会低估 VoltDB 的性能,因为它没有利用通过在存储过程调用中将逻辑捆绑在一起所提供的优化。
VoltDB 开发人员在这里。
尽管有几个用户使用 YCSB 框架进行了基准测试,但没有官方的 YCSB 驱动程序。YCSB 和 VoltDB 之间有一点阻抗不匹配。YCSB 旨在与范围分片列存储一起使用。VoltDB 是一个散列分片关系存储,具有对服务器端逻辑的丰富支持。
这表现为三个方面的问题。
首先是 YCSB 需要范围扫描。如果您对密钥分布有一定的了解,并且可以对密钥进行规范化,以便它们有用地存储,您可以在哈希分片存储中进行有效的范围扫描。这是您如何在Cassandra中执行此操作的示例。
这不是不可克服的,但需要一些思考。
第二个问题是列存储模型不能很好地映射到关系数据模型。我可以通过将小地图打包成一个带有 blob 的单行并在添加/更新 k/v 对时重写它,从而获得相当多的速度和内存效率。这就是 Redis 处理小地图的方式。
对于具有许多/较大 k/v 对的较大键,非规范化并允许数据库管理内存是有意义的。通过一些工作,您可以创建一个透明地执行此操作的存储过程 API。
同样,这不是不可克服的,但也不是微不足道的。
第三个问题是 YCSB 是在假设所有逻辑都存在于客户端并且服务器必须为客户端实现所有数据的假设下编写的。这意味着针对 VoltDB 编写的真实世界应用程序可能会快几倍,并且空间效率更高。更快,因为服务器端逻辑可以消除到客户端的多次往返,并且更节省空间,因为对事务的支持使您可以避免以日志结构的方式编写应用程序。
YCSB 将让您大致了解 VoltDB 如何执行和扩展,但是通过以适合关系数据模型和 Volt 对服务器端逻辑的强调的方式编写应用程序,可以获得非同寻常的收益。
关于TPC-C。VoltDB 专为类似 TPC-C 的基准测试而构建。我说“喜欢”是因为它不是官方的,并且在某些方面与 TPC-C 不同。最显着的区别是新订单交易只使用一个仓库(而不是某些百分比的新订单所需的 1-10 个仓库)。这很重要,因为它允许基准测试在没有任何分布式事务的情况下完美分片。
VoltDB TPC-C 之类的基准测试不随发行版提供,但可在github上找到。