{"id":13617201,"url":"https://github.com/DBOS-project/apiary","last_synced_at":"2025-04-14T03:33:17.566Z","repository":{"id":37005169,"uuid":"456627850","full_name":"DBOS-project/apiary","owner":"DBOS-project","description":"Transactional functions-as-a-service for database-oriented applications.","archived":false,"fork":false,"pushed_at":"2023-10-13T18:50:14.000Z","size":3341,"stargazers_count":142,"open_issues_count":0,"forks_count":16,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-08-01T20:46:14.397Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://dbos-project.github.io/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DBOS-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-07T18:28:24.000Z","updated_at":"2024-07-28T14:06:50.000Z","dependencies_parsed_at":"2023-10-14T19:04:59.540Z","dependency_job_id":null,"html_url":"https://github.com/DBOS-project/apiary","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DBOS-project%2Fapiary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DBOS-project%2Fapiary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DBOS-project%2Fapiary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DBOS-project%2Fapiary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DBOS-project","download_url":"https://codeload.github.com/DBOS-project/apiary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248815786,"owners_count":21165981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T20:01:38.254Z","updated_at":"2025-04-14T03:33:12.556Z","avatar_url":"https://github.com/DBOS-project.png","language":"Java","funding_links":[],"categories":["开发框架","Java"],"sub_categories":[],"readme":"\u003cimg src=\"https://storage.googleapis.com/apiary_public/apiary_logo_timeburner.png\" width=\"400\"\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**This repository is research code and no longer maintained. The students working on it have graduated.**\n\nWelcome to Apiary!  Apiary is a transactional function-as-a-service (FaaS) framework for building\ndatabase-oriented applications such as microservices and web service backends.\nApiary provides an easy-to-use Java interface that supports general computation\nand offers excellent performance, strong consistency guarantees,\nand powerful new observability features such as automatic data provenance capture.\nApiary is an ongoing research project within the MIT-Stanford \n[DBOS](https://dbos-project.github.io/) collaboration;\nwe are interested in any feedback you can provide to improve the project\nso it better meets developers' needs.\n\nAn Apiary application is composed of _transactional functions_,\nwhich are regular Java functions that use SQL to access application state in a backend database,\nbut which execute as ACID database transactions.\nWe provide interfaces to write these functions, compose them into larger programs,\nthen schedule and run them.  Apiary provides three exciting features:\n\n* High performance, especially in a distributed setting,\nthrough aggressive co-location of compute and data.\n* Strong consistency for programs, including exactly-once semantics for program execution \nand cross-function or even cross-application transactional guarantees.\n* Data provenance capture for observability: we automatically record \nevery function execution and every operation performed on data,\nthen store this information in easy-to query database tables to aid in\ndebugging, monitoring, and auditing.\n\nApiary currently supports two database backends: Postgres and VoltDB.\nIt can export provenance data to two systems: Postgres and Vertica.\nWe are open to supporting more databases in the future.\n\n### Getting Started\n\nTo get started with Apiary, let's run a demo application:\na simple [social network](postgres-demo/)\nbuilt with Apiary and [Spring Boot](https://spring.io/projects/spring-boot).\nIt requires [Docker](https://docs.docker.com/engine/install/).\n\nTo set up the demo, let's first install some dependencies:\n\n```shell\nsudo apt install openjdk-11-jdk maven libatomic1\n```\n\nNext, let's compile Apiary. In the Apiary root directory, run:\n\n```shell\nmvn -DskipTests package\n```\n\nThen, let's start Postgres from a Docker image. We recommend you [configure Docker](https://docs.docker.com/engine/install/linux-postinstall/) so it can be run by non-root users.\n\n```shell\nscripts/initialize_postgres_docker.sh\n```\n\nTo start the website, run in the `postgres-demo` root directory:\n```shell\nmvn clean \u0026\u0026 mvn package \u0026\u0026 mvn spring-boot:run\n```\n\nThen, navigate to `localhost:8081` to view this new social network!\nYou should see its home page.\n\n### Next Steps\nIf you want to learn more, we provide [a detailed tutorial](postgres-demo/README.md)\nshowing you how to build the demo social networking application.\nWe also have a [programming guide](ProgrammingGuide.md)\nfor Apiary as well as [documentation](https://dbos-project.github.io/apiary-docs/).\n\n### Other Projects\nThis repository additionally contains source code for [Epoxy (VLDB 23)](http://petereliaskraft.net/res/p2732-kraft.pdf) and [R\u003csup\u003e3\u003c/sup\u003e (VLDB 23)](https://qianli.dev/docs/p2761-li.pdf).  Detailed information on Epoxy is [here](Epoxy.md).  Detailed information on R\u003csup\u003e3\u003c/sup\u003e is [here](https://github.com/DBOS-project/apiary/blob/r3-exp/R3-VLDB-Experiments.md).\n\n### Contact Us\n\nWe're interested in any feedback you have to make this project better.\nApiary is primarily developed by [Peter Kraft](http://petereliaskraft.net/)\nand [Qian Li](https://qianli.dev/)\nas part of the [DBOS](https://dbos-project.github.io/) project.\nContact us via email at:\n```\napiary-group@cs.stanford.edu\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDBOS-project%2Fapiary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDBOS-project%2Fapiary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDBOS-project%2Fapiary/lists"}