{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/machine-unlearning-in-learned-databases-an","title":"Machine Unlearning in Learned Databases: An Experimental Analysis","arxiv_id":"2311.17276","date":"2023-11-28","proceeding":null,"authors":["Meghdad Kurmanji","Eleni Triantafillou","Peter Triantafillou"],"abstract":"Machine learning models based on neural networks (NNs) are enjoying ever-increasing attention in the DB community. However, an important issue has been largely overlooked, namely the challenge of dealing with the highly dynamic nature of DBs, where data updates are fundamental, highly-frequent operations. Although some recent research has addressed the issues of maintaining updated NN models in the presence of new data insertions, the effects of data deletions (a.k.a., \"machine unlearning\") remain a blind spot. With this work, for the first time to our knowledge, we pose and answer the following key questions: What is the effect of unlearning algorithms on NN-based DB models? How do these effects translate to effects on downstream DB tasks, such as selectivity estimation (SE), approximate query processing (AQP), data generation (DG), and upstream tasks like data classification (DC)? What metrics should we use to assess the impact and efficacy of unlearning algorithms in learned DBs? Is the problem of machine unlearning in DBs different from that of machine learning in DBs in the face of data insertions? Is the problem of machine unlearning for DBs different from unlearning in the ML literature? what are the overhead and efficiency of unlearning algorithms? What is the sensitivity of unlearning on batching delete operations? If we have a suitable unlearning algorithm, can we combine it with an algorithm handling data insertions en route to solving the general adaptability/updatability requirement in learned DBs in the face of both data inserts and deletes? We answer these questions using a comprehensive set of experiments, various unlearning algorithms, a variety of downstream DB tasks, and an upstream task (DC), each with different NNs, and using a variety of metrics on a variety of real datasets, making this also a first key step towards a benchmark for learned DB unlearning.","url_abs":"https://arxiv.org/abs/2311.17276v1","url_pdf":"https://arxiv.org/pdf/2311.17276v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"links_only","authors_date_abstract":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license), from the Kaggle arXiv metadata snapshot of 2026-09-12"},"code_links":[{"paper_slug":"machine-unlearning-in-learned-databases-an","repo_url":"https://github.com/meghdadk/db_unlearning","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2311.17276","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2311.17276"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/meghdadk/db_unlearning","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_fixture":1,"ran_draft_wrong":1,"ran":10,"unverified":3},"by_repo_kind":{"official":{"samples":15,"ran":12,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"b6c3c093da58e8e3","entry":"Entropy","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"naru/train_model.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/naru/train_model.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b6c3c093da58e8e3"}},{"code_sha256_prefix":"eb641f3aafc7f28c","entry":"InvertOrder","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"naru/eval_model.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/naru/eval_model.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"eb641f3aafc7f28c"}},{"code_sha256_prefix":"01fa27ae6183e41b","entry":"MLP","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"tcls/models.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/tcls/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"01fa27ae6183e41b"}},{"code_sha256_prefix":"5bbe1531cb4ab972","entry":"MoGـsampling","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/utils.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5bbe1531cb4ab972"}},{"code_sha256_prefix":"f0a007455fa85919","entry":"ResNet1D","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"tcls/models.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/tcls/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f0a007455fa85919"}},{"code_sha256_prefix":"2dfd5c008e1585eb","entry":"adjust_learning_rate","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/utils.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2dfd5c008e1585eb"}},{"code_sha256_prefix":"c015f4606fed587c","entry":"cal_avg","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/benchmarking.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/benchmarking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c015f4606fed587c"}},{"code_sha256_prefix":"340974a6ff8f2f89","entry":"cal_count","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/benchmarking.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/benchmarking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"340974a6ff8f2f89"}},{"code_sha256_prefix":"cfe64ad66f5aeefa","entry":"cal_sum","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/benchmarking.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/benchmarking.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cfe64ad66f5aeefa"}},{"code_sha256_prefix":"546dd9e92541aecd","entry":"init_logger","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"naru/train_model.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/naru/train_model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"546dd9e92541aecd"}},{"code_sha256_prefix":"a94224cb98b134be","entry":"init_logger","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/train_mdn.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/train_mdn.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a94224cb98b134be"}},{"code_sha256_prefix":"38f4116279596c2f","entry":"sample","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/utils.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"38f4116279596c2f"}},{"code_sha256_prefix":"e85c652a61556e92","entry":"RunEpoch","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"naru/eval_model.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/naru/eval_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e85c652a61556e92"}},{"code_sha256_prefix":"15c558e5263df71c","entry":"RunEpoch","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"naru/train_model.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/naru/train_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"15c558e5263df71c"}},{"code_sha256_prefix":"7027dbc4b69cb3fb","entry":"delete","repo":"meghdadk/db_unlearning","repo_kind":"official","path":"dbest/train_mdn.py","file_url":"https://github.com/meghdadk/db_unlearning/blob/HEAD/dbest/train_mdn.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7027dbc4b69cb3fb"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}