
Supaseqs是一種工具,可用於在本地管理DNA序列數據庫,這要歸功於Supabase提供的PostgreSQL實現。
它利用PostgreSQL作為後端數據庫管理器,基於KMER的矢量化和向量搜索來模仿BLAST的功能。
如果您在Linux環境中工作,則可能只想下載/複製設置。 SH並啟動它:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.sh確保您的環境有:
gitNode v18或關注npm和npxpython 3.10或遵循安裝過程應在Windows和Linux上使用。 首先,克隆這個存儲庫:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs獲取supabase命令行的可執行文件:
# BOTH Windows and Linux
npm install supabase創建並啟動一個supabase實例:
# BOTH Windows and Linux
npx supabase init
npx supabase start從DB URL中檢索連接字符串,該字符串將在此命令之後打印:
# BOTH Windows and Linux
npx supabase status創建一個虛擬環境,激活它並安裝必要的依賴項:
# Linux
python3 -m venv apienv
source apienv/bin/activate
python3 -m pip install -r requirements.txt或者
# Windows
python3 - m venv .apienv
.apienvScriptsactivate # For Command Prompt
# or
.apienvActivate.ps1 # For PowerShell
python3 - m pip install - r .requirements.txt在虛擬環境中,運行:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev 如果與Supabase客戶端的連接存在問題,請確保用16 main.py中的連接字符串與您發現的運行supabase status連接字符串。
該應用程序可作為API服務,利用FastAPI。與supabase的連接是通過客戶端的sqlalchemy實現來處理的,該客戶與vecs庫中構建的客戶相似。
該應用程序接受兩種請求類型:
1-帖子-上傳序列或FASTA文件:
# Single sequence
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , " description " : " M57688.1 Octodon degus glucagon mRNA, complete cds " } "
# FASTA file
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " sequence.fasta " } "每個序列都通過基於5-mer的表示(一個1024-DIM陣列)進行矢量化,然後將其上傳到Supabase上的sequences表和描述(如果在單個序列的情況下提供,則提供了快速文件中的序列的序列)和原始序列。
2-獲取-搜索序列數據庫
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json '查詢序列將進行矢量化並蒐索數據庫:如果它們符合相似性閾值(指定為具有閾值鍵的百分比值),則返回許多序列(用限制密鑰指定,最大為1000);典型的響應看起來像這樣:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }}這要歸功於稱為match_page_sections的功能,並定義如下:
create or replace function public .match_page_sections (
embedding vector( 1024 ),
match_threshold float,
match_count int
)
returns setof public . sequences
language sql
as $$
select *
from public . sequences
where public . sequences .embedding <=> embedding < 1 - match_threshold
order by public . sequences .embedding <=> embedding asc
limit least(match_count, 1000 );
$$;貢獻非常歡迎!有關更多信息,請參見貢獻指南:)
如果您發現該項目有用,請考慮為其提供資金並使其成長:讓我們一起支持開源!
該項目是根據MIT許可提供的:它將始終是開源的,可以免費使用。
如果您使用此項目,請引用作者:Astra Clelia Bertelli