
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