我对数据库不太熟悉,所以我不知道如何使用SQLAlchemy对表进行分区。
非常感谢您的帮助。
答案 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如何为您提供支持,但请注意,应用程序级分片将影响您构建应用程序代码的方式。