GraphyBench是一款由中国软件评测中心、蚂蚁集团联合牵头,浙江创邻科技有限公司、北京海致星图科技有限公司、北京大学、清华大学共同研发的图数据库基准测试工具。
GraphyBench通过模拟多种真实的金融业务场景客观反映图数据库在金融场景下的性能和可靠性,测试指标包括吞吐量、响应时间、及时率,帮助图数据库厂商在研发过程中进行面向金融场景的性能评价和压测,为第三方评测机构提供评价依据。
GraphyBench数据模型以实体及其关系的形式定义了基准中使用的数据结构,这些数据代表了一段时间内多个金融场景中的活动快照。实体和关系分别用顶点和边表示,其中,顶点类型包括人(Person)、公司(Company)、账户(Account)、贷款(Loan)、介质(Medium),边类型包括申请(apply)、拥有(own)、转账(transfer)、投资(invest)、取款(withdraw)、担保(guarantee)、偿还(repay)、存款(deposit)、登入(signIn)。
GraphyBench定义了一组比例因子(SF),以适应不同规模和预算的系统。具体来说,SF1数据集为1 GiB,SF10数据集为10 GiB。数据以CSV文件形式提供。我们使用数据生成器将数据分为初始数据集和增量数据集,其中初始数据占97%,增量数据占3%。当前可用的比例因子包括:0.01、0.1、0.3、1、3和10。默认情况下,所有比例因子都定义为涵盖三年的数据,起始年份为2020年。
GraphyBench工作负载包括12个复杂读查询(TCR)、6个简单读查询(TSR)、19个写查询(TW)和3个读写查询(TRW),这些查询均为在线金融系统中常见的数据处理和分析操作。
| 指标名称 | 含义 |
|---|---|
| 吞吐量(TPS) | 系统在单位时间内能够处理的事务数量 |
| 响应时间 | 每个查询会记录7种响应时间:最小响应时间、50分位响应时间、90分位响应时间、95分位响应时间、99分位响应时间、最大响应时间、平均响应时间) |
| 及时率 | 每个查询都有预定的开始时间。若由于被测系统阻塞导致查询未能在预定时间内发出且延迟超过1秒,则视为该查询未能及时响应。测试过程中所有查询及时率大于等于95%时,本次测试有效。 |
GraphyBench基准测试需要满足事务测试的要求,包括原子性、隔离性、一致性和持久性。事务测试确保系统在并发操作和异常情况下,能够正确处理事务,保持数据的完整性和一致性。
| 测试类型 | 测试内容 | |
| 原子性测试 | Atomicity - Commit(Atomicity-C) | |
| Atomicity - Rollback(Atomicity-RB) | ||
| 隔离性测试 | 脏写 Dirty Write(DW) | |
| 脏读 Dirty Read(DR) | 放弃读取 Aborted Read(AR) | |
| 中间读取 Intermediate Read(IR) | ||
| 循环信息流 Circular Information Flow(CIF) | ||
| 切割异常 Cut Anomalies (CA) | 多前继项 Item-Many-Preceders(IMP) | |
| 谓词-多前继项 Predicate-Many-Preceders(PMP) | ||
| 观察到的事务消失 Observed Transaction Vanishes(OTV) | ||
| 断裂读取 Fractured Read(FR) | ||
| 丢失更新 Lost Update(LU) | ||
| 写偏斜 Write Skew(WS) | ||
| 一致性测试 | ||
| 持久性测试 | ||
GraphyBench程序分为数据生成器、测试驱动两个模块。
GraphyBench提供数据生成器,根据比例因子生成不同规模的测试数据。生成的数据包括初始数据集、增量数据集和查询参数。
GraphyBench测试驱动包括创建验证结果、验证数据库、执行基准测试三个子模块。驱动程序通过读取配置文件进行初始化。
驱动程序有三种模式:CREATE_VALIDATION、VALIDATE_DATABASE、EXECUTE_BENCHMARK。
CREATE_VALIDATION:创建验证模式,生成一个用于验证的参考集。需要配置以下参数:
validation_parameters_size:表示验证参考集的大小。
validate_database:存储创建结果的文件。
VALIDATE_DATABASE:验证数据库模式,用于验证数据库的正确。需要配置以下参数:
validate_database:是由CREATE_VALIDATION模式创建的结果。
EXECUTE_BENCHMARK:执行性能测试,需要配置以下参数:
thread_count:驱动程序可以处理的并发请求数。
time_compression_ratio(TCR):控制驱动程序工作负载的强度,较低的值会在较短的时间内产生更高的工作负载。
ignore_scheduled_start_times:确定驱动程序是否应遵循发送请求的预定时间。如果设置为true,则驱动程序会在准备好后立即发送请求,而不考虑时间表。
warmup:指在实际基准测试开始之前处理的预测试项数量。
operation_count:设置在预热后实际基准测试阶段执行的测试项数量。
一次完整的基准测试需要包括以下几个方面:正确性验证、性能测试、事务隔离级别测试、一致性和持久性测试。只有在所有测试都符合要求的情况下,测试结果才被视为有效。