gpt4 book ai didi

python - 混合 PostgreSQL 和 MongoDB(作为 Django 后端)

转载 作者:IT老高 更新时间:2023-10-28 13:10:27 24 4
gpt4 key购买 nike

出于性能原因,我正在考虑将我的网站后端从 Postgres 转移到 Mongo,但该网站的关键部分依赖 GeoDjango 模型来计算现实世界中对象之间的距离(等等)。

让大部分站点在 Mongo 上运行但那些关键区域使用 Postgres 进行存储是否可行?这是痛苦的和/或容易出错的吗?是否有我缺少的全 Mongo 解决方案?

如果您能为我提供关于这些问题的任何启示,我们将不胜感激。

最佳答案

从 Django 1.2 开始,您可以 define multiple datbase connections在您的 settings.py 中。然后你可以使用 database routers 告诉 Django 去哪个数据库,对你的应用程序透明。

免责声明:这就是我认为应该如何工作的方式,我从未在 Django 中使用过 MongoDB,也没有测试过我的代码是否真的有效。 :)

settings.py

DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'mydata',
...
}
'geodata' {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'geodata',
...
}
}

DATABASE_ROUTERS = ['path.to.ModelMetaRouter']

型号

然后将自定义元变量添加到您的地理表中,以覆盖其数据库。不要将此属性添加到应该转到默认数据库的模型中。

class SomeGeoModel(models.Model):
...
class Meta:
using = 'geodata'

数据库路由器

并编写一个数据库路由器来将所有具有 using 元属性集的模型定向到适当的连接:

class ModelMetaRouter(object):
def db_for_read(self, model, **hints):
return getattr(model._meta, 'using', None)

def db_for_write(self, model, **hints):
return getattr(model._meta, 'using', None)

def allow_relation(self, obj1, obj2, **hints):
# only allow relations within a single database
if getattr(obj1._meta, 'using', None) == getattr(obj2._meta, 'using', None):
return True
return None

def allow_syncdb(self, db, model):
if db == getattr(model._meta, 'using', 'default'):
return True
return None

关于python - 混合 PostgreSQL 和 MongoDB(作为 Django 后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com