我对数据库不是很熟悉,所以我不知道如何使用 SQLAlchemy 对表进行分区。
您的帮助将不胜感激。
有两种分区方式:垂直分区和水平分区。
从文档:
垂直分区
垂直分区在多个数据库中放置不同类型的对象或不同的表:
engine1 = create_engine('postgres://db1') engine2 = create_engine('postgres://db2') Session = sessionmaker(twophase=True) # bind User operations to engine 1, Account operations to engine 2 Session.configure(binds={User:engine1, Account:engine2}) session = Session()
水平分区
水平分区跨多个数据库对单个表(或一组表)的行进行分区。
请参阅中的“分片”示例
attribute_shard.py
只需询问您是否需要有关这些的更多信息,最好提供有关您想要做什么的更多信息。
对于不熟悉数据库的人来说,这是一个相当高级的主题,但请尝试 Essential SQLAlchemy(您可以在Google Book Search上阅读关键部分——第 122 至 124 页;第 125-126 页上的示例不能在线免费阅读,所以您如果您想阅读示例,则必须购买这本书或在 O'Reilly 的Safari等商业服务上阅读它——也许是免费试用的)。
如果您提及您是在谈论垂直分区还是水平分区,为什么需要分区以及为此目的考虑使用哪些底层数据库引擎,也许您可以获得更好的答案。
自动分区是一个非常特定于数据库引擎的概念,SQLAlchemy 不提供任何通用工具来管理分区。主要是因为它不会提供任何真正有用的东西,同时作为另一个 API 来学习。如果要进行数据库级分区,则使用自定义 Oracle DDL 语句执行 CREATE TABLE 语句(请参阅 Oracle 文档如何创建分区表并将数据迁移到其中)。您可以在 SQLAlchemy 中使用分区表,就像使用普通表一样,您只需要表声明,以便 SQLAlchemy 知道要查询什么。您可以反映数据库中的定义,或者只是在 SQLAlchemy 代码中复制表声明。
非常大的数据集通常是基于时间的,旧数据变为只读或只读,查询通常只查看时间间隔内的数据。如果这描述了您的数据,您可能应该使用日期字段对数据进行分区。
还有应用程序级别的分区或分片,您可以在其中使用应用程序将数据拆分到不同的数据库实例中。由于过高的定价模型,这在甲骨文世界中并不是那么受欢迎。如果您确实想使用分片,请查看 SQLAlchemy 文档和示例,了解 SQLAlchemy 如何在这方面为您提供支持,但请注意应用程序级别的分片将影响您构建应用程序代码的方式。