如何制作表分区?

时间:2009-07-06 03:33:05

标签: python sqlalchemy

我对数据库不太熟悉,所以我不知道如何使用SQLAlchemy对表进行分区。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

分区有两种:垂直分区和水平分区。

来自docs

  

垂直分区

     

垂直分区的位置不同   各种对象或不同的表,   跨多个数据库:

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

请询问您是否需要有关这些信息的更多信息,最好提供有关您想要做的事情的更多信息。

答案 1 :(得分:3)

对于不熟悉数据库的人来说,这是一个非常先进的主题,但是尝试Essential SQLAlchemy(你可以阅读Google Book Search上的关键部分 - 第122到124页;第125-126页上的例子不是自由的可在线阅读,因此您必须购买本书或在商业服务上阅读,例如O'Reilly的Safari - 可能是免费试用 - 如果您想阅读该示例。)

如果你提到你是在谈论垂直或水平分区,为什么需要分区,以及为此目的考虑的底层数据库引擎,也许你可以得到更好的答案。

答案 2 :(得分:2)

自动分区是一种特定于数据库引擎的概念,SQLAlchemy不提供任何通用工具来管理分区。主要是因为在学习另一个API时它不会提供任何真正有用的东西。如果要进行数据库级别分区,请使用自定义Oracle DDL语句执行CREATE TABLE语句(请参阅Oracle文档,了解如何创建分区表并将数据迁移到它们)。您可以在SQLAlchemy中使用分区表,就像使用普通表一样,只需要表声明,以便SQLAlchemy知道要查询的内容。您可以从数据库中反映定义,或者只是在SQLAlchemy代码中复制表声明。

非常大的数据集通常是基于时间的,旧数据变为只读或大部分读取,查询通常只查看时间间隔内的数据。如果它描述了您的数据,您应该使用日期字段对数据进行分区。

还有应用程序级别分区或分片,您可以使用应用程序跨不同数据库实例分割数据。由于过高的定价模式,这在甲骨文世界并不是那么流行。如果您确实想使用分片,那么请查看SQLAlchemy文档和示例,了解SQLAlchemy如何为您提供支持,但请注意,应用程序级分片将影响您构建应用程序代码的方式。