SQLite 为每个点创建一个 table 或存储为字符串
SQLite create a table for each point or store as string
我需要将 3D 点存储在数据库中(使用 SQLAlchemy 的 SQLite)。每个 3D 点集将包含约 1000 个点,而我有多达数百个点集。我一直在使用 JSON 将每个点 X、Y、Z 坐标转换为一个大字符串,然后将 3 个字符串存储在一个 table.
中
from db.base import Base
from sqlalchemy import Column, Integer, String
class PointData(Base):
''' Raw point data, cannot store array in sqlite '''
#JSON strings
x_data = Column(String(), nullable=True)
y_data = Column(String(), nullable=True)
z_data = Column(String(), nullable=True)
另一种选择是为点集中的每个点创建一个 table - 我最终会得到 ~1000 tables。对于数据库整体大小和性能,哪种方法更好 - 大单个 tables 或更多小 tables?
您提出的两个解决方案均未标准化。
创建两个 table:
CREATE TABLE PointSet (
id INTEGER PRIMARY KEY
)
CREATE TABLE Point (
id INTEGER PRIMARY KEY,
pointSetId INTEGER REFERENCES PointSet(id),
x NUMERIC,
y NUMERIC,
z NUMERIC
)
对于每个点,在 Point
table 中插入一行,并将 pointSetId
设置为其所属集合的 ID。通过过滤掉 pointSetId
不匹配的行来查询点 table。
我需要将 3D 点存储在数据库中(使用 SQLAlchemy 的 SQLite)。每个 3D 点集将包含约 1000 个点,而我有多达数百个点集。我一直在使用 JSON 将每个点 X、Y、Z 坐标转换为一个大字符串,然后将 3 个字符串存储在一个 table.
中from db.base import Base
from sqlalchemy import Column, Integer, String
class PointData(Base):
''' Raw point data, cannot store array in sqlite '''
#JSON strings
x_data = Column(String(), nullable=True)
y_data = Column(String(), nullable=True)
z_data = Column(String(), nullable=True)
另一种选择是为点集中的每个点创建一个 table - 我最终会得到 ~1000 tables。对于数据库整体大小和性能,哪种方法更好 - 大单个 tables 或更多小 tables?
您提出的两个解决方案均未标准化。
创建两个 table:
CREATE TABLE PointSet (
id INTEGER PRIMARY KEY
)
CREATE TABLE Point (
id INTEGER PRIMARY KEY,
pointSetId INTEGER REFERENCES PointSet(id),
x NUMERIC,
y NUMERIC,
z NUMERIC
)
对于每个点,在 Point
table 中插入一行,并将 pointSetId
设置为其所属集合的 ID。通过过滤掉 pointSetId
不匹配的行来查询点 table。