David Zhao 0001

dblp:89/5719-1 · DBLP profile ↗
← Back
11ranked-venue papers
4as first author
7since 2021 · last 2025
0000-0002-3857-5016ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 8 · 4 first-author · 6 since 2021Systems, architecture and hardware · 3 · 1 since 2021Theory of computation · 2 · 1 first-author · 2 since 2021
YearPublicationVenuePosition
2025 Provenance Guided Rollback Suggestions
abstract
Abstract Advances in incremental Datalog evaluation strategies have made Datalog popular among use cases with constantly evolving inputs such as static analysis in continuous integration and deployment pipelines. As a result, new logic programming debugging techniques are needed to support these emerging use cases. This paper introduces an incremental debugging technique for Datalog, which determines the failing changes for a rollback in an incremental setup. Our debugging technique leverages a novel incremental provenance method. We have implemented our technique using an incremental version of the Soufflé Datalog engine and evaluated its effectiveness on the DaCapo Java program benchmarks analyzed by the Doop static analysis library. Compared to state-of-the-art techniques, we can localize faults and suggest rollbacks with an overall speedup of over 26.9 $\times$ while providing higher quality results.
David Zhao 0001, Pavle Subotic, Mukund Raghothaman, Bernhard Scholz
Theory Pract. Log. Program.1
2023 Automatic Rollback Suggestions for Incremental Datalog Evaluation
David Zhao 0001, Pavle Subotic, Mukund Raghothaman, Bernhard Scholz
PADL1
2022 Building a Join Optimizer for Soufflé
Samuel Arch, David Zhao 0001, Pavle Subotic, Bernhard Scholz
LOPSTR3
2022 Specializing parallel data structures for Datalog
abstract
Summary We see a resurgence of Datalog in a variety of applications, including program analysis, networking, data integration, cloud computing, and security. The large‐scale and complexity of these applications need the efficient management of data in relations. Hence, Datalog implementations require new data structures for managing relations that (1) are parallel, (2) are highly specialized for Datalog evaluation, and (3) can accommodate different workloads depending on the applications concerning memory consumption and computational efficiency. In this article, we present a data structure framework for relations that is specialized for shared‐memory parallel Datalog implementations such as the soufflé Datalog compiler. The data structure framework permits a portfolio of different data structures depending on the workload. We also introduce two concrete parallel data structures for relations, designed for various workloads. Our benchmarks demonstrate a speed‐up of up to 6× by using a portfolio of data structures compared with using a B‐tree alone, showing the advantage of our data structure framework.
Herbert Jordan, Pavle Subotic, David Zhao 0001, Bernhard Scholz
Concurr. Comput. Pract. Exp.3
2021 The Choice Construct in the Soufflé Language
Joshua Karp, David Zhao 0001, Abdul Zreika, Xi Wu 0005, Bernhard Scholz
APLAS3
2021 An efficient interpreter for Datalog by de-specializing relations
abstract
Datalog is becoming increasingly popular as a standard tool for a variety of use cases. Modern Datalog engines can achieve high performance by specializing data structures for relational operations. For example, the Datalog engine Soufflé achieves high performance with a synthesizer that specializes data structures for relations. However, the synthesizer cannot always be deployed, and a fast interpreter is required.
David Zhao 0001, Herbert Jordan, Bernhard Scholz
PLDI2
2021 Towards Elastic Incrementalization for Datalog
abstract
Various incremental evaluation strategies for Datalog have been developed that reuse computations for small input changes. These methods assume that incrementalization is always a better strategy than recomputation. However, in real-world applications such as static program analysis, recomputation can be cheaper than incrementalization for large updates.
David Zhao 0001, Pavle Subotic, Mukund Raghothaman, Bernhard Scholz
PPDP1
2020 Provenance-guided synthesis of Datalog programs
abstract
We propose a new approach to synthesize Datalog programs from input-output specifications. Our approach leverages query provenance to scale the counterexample-guided inductive synthesis (CEGIS) procedure for program synthesis. In each iteration of the procedure, a SAT solver proposes a candidate Datalog program, and a Datalog solver evaluates the proposed program to determine whether it meets the desired specification. Failure to satisfy the specification results in additional constraints to the SAT solver. We propose efficient algorithms to learn these constraints based on “ why ” and “ why not ” provenance information obtained from the Datalog solver. We have implemented our approach in a tool called ProSynth and present experimental results that demonstrate significant improvements over the state-of-the-art, including in synthesizing invented predicates, reducing running times, and in decreasing variances in synthesis performance. On a suite of 40 synthesis tasks from three different domains, ProSynth is able to synthesize the desired program in 10 seconds on average per task—an order of magnitude faster than baseline approaches—and takes only under a second each for 28 of them.
Mukund Raghothaman, Jonathan Mendelson, David Zhao 0001, Mayur Naik, Bernhard Scholz
Proc. ACM Program. Lang.3
2020 Debugging Large-scale Datalog: A Scalable Provenance Evaluation Strategy
abstract
Logic programming languages such as Datalog have become popular as Domain Specific Languages (DSLs) for solving large-scale, real-world problems, in particular, static program analysis and network analysis. The logic specifications that model analysis problems process millions of tuples of data and contain hundreds of highly recursive rules. As a result, they are notoriously difficult to debug. While the database community has proposed several data provenance techniques that address the Declarative Debugging Challenge for Databases, in the cases of analysis problems, these state-of-the-art techniques do not scale. In this article, we introduce a novel bottom-up Datalog evaluation strategy for debugging: Our provenance evaluation strategy relies on a new provenance lattice that includes proof annotations and a new fixed-point semantics for semi-naïve evaluation. A debugging query mechanism allows arbitrary provenance queries, constructing partial proof trees of tuples with minimal height. We integrate our technique into Soufflé, a Datalog engine that synthesizes C++ code, and achieve high performance by using specialized parallel data structures. Experiments are conducted with D OOP /DaCapo, producing proof annotations for tens of millions of output tuples. We show that our method has a runtime overhead of 1.31× on average while being more flexible than existing state-of-the-art techniques.
David Zhao 0001, Pavle Subotic, Bernhard Scholz
ACM Trans. Program. Lang. Syst.1
2019 Fast Parallel Equivalence Relations in a Datalog Compiler
abstract
Modern parallelizing Datalog compilers are employed in industrial applications such as networking and static program analysis. These applications regularly reason about equivalences, e.g., computing bitcoin user groups, fast points-to analyses, and optimal network routes. State-of-the-art Datalog engines represent equivalence relations verbatim by enumerating all possible pairs in an equivalence class. This approach inhibits scalability for large datasets. In this paper, we introduce EQREL, a specialized parallel union-find data structure for scalable equivalence relations, and its integration into a Datalog compiler. Our data structure provides a quadratic worst-case speed-up and space improvement. We demonstrate the efficacy of our data structure in SOUFFLÉ, which is a Datalog compiler that synthesizes parallel C ++ code. We use real-world benchmarks and show that the new data structure scales on shared-memory multi-core architectures storing up to a half-billion pairs for a static program analysis scenario.
Patrick Nappa, David Zhao 0001, Pavle Subotic, Bernhard Scholz
PACT2
2019 A specialized B-tree for concurrent datalog evaluation
abstract
Modern Datalog engines are employed in industrial applications such as graph-databases, networks, and static program analysis. To cope with vast amount of data, Datalog engines must employ parallel execution strategies, for which specialized concurrent data structures are of paramount importance.
Herbert Jordan, Pavle Subotic, David Zhao 0001, Bernhard Scholz
PPoPP3