日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何正確匹配多個數(shù)據(jù)庫? (怎么匹配出多個數(shù)據(jù)庫)

在當(dāng)今互聯(lián)網(wǎng)時代,數(shù)據(jù)庫已經(jīng)逐漸成為了企業(yè)和組織進(jìn)行信息管理的不可或缺的工具。但是,在企業(yè)和組織規(guī)模逐漸擴(kuò)大的情況下,數(shù)據(jù)量也越來越龐大,單個數(shù)據(jù)庫已經(jīng)無法滿足需求。因此,多個數(shù)據(jù)庫的使用已經(jīng)成為了常態(tài)。但是,在使用多個數(shù)據(jù)庫的過程中,如何正確地進(jìn)行匹配,才能夠更好地實現(xiàn)數(shù)據(jù)的管理與利用,則成了一個十分重要的問題。

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)大新,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

要考慮多個數(shù)據(jù)庫的類型以及功能。在實踐中,使用的數(shù)據(jù)庫可以分為結(jié)構(gòu)化數(shù)據(jù)庫、非結(jié)構(gòu)化數(shù)據(jù)庫以及用于搜索的數(shù)據(jù)庫等多種類型。因此,在使用多個數(shù)據(jù)庫的時候,必須要根據(jù)需要進(jìn)行選擇和精細(xì)的匹配。更好的辦法是根據(jù)數(shù)據(jù)類型和數(shù)據(jù)量,選擇適合的數(shù)據(jù)庫進(jìn)行使用,以達(dá)到數(shù)據(jù)存儲和訪問的更佳效果。

為了更好地對多個數(shù)據(jù)庫進(jìn)行管理,必須要對數(shù)據(jù)庫進(jìn)行分類和歸類。對于相似或相關(guān)的數(shù)據(jù)庫,應(yīng)當(dāng)將其歸為同一類別,方便統(tǒng)一管理。另外,由于不同的數(shù)據(jù)庫具有不同的性質(zhì)和特點,因此在管理和操作時,需要根據(jù)實際需求,精細(xì)地設(shè)置權(quán)限和操作規(guī)則,以避免不必要的錯誤和數(shù)據(jù)泄露等情況。

再次,為了實現(xiàn)多個數(shù)據(jù)庫的協(xié)同工作,需要利用好跨數(shù)據(jù)庫的工具和技術(shù)。一些成熟的數(shù)據(jù)庫管理軟件可以通過跨數(shù)據(jù)庫的查詢、聯(lián)合操作、備份和恢復(fù)等功能,讓多個數(shù)據(jù)庫可以相互連接和協(xié)同管理,提高企業(yè)和組織的數(shù)據(jù)處理效率。

要做好數(shù)據(jù)庫備份和數(shù)據(jù)同步工作。備份可以很好地保障數(shù)據(jù)庫的安全性和可靠性,而數(shù)據(jù)同步則可以實現(xiàn)對多個數(shù)據(jù)庫的協(xié)同部署以及對數(shù)據(jù)的及時更新和變更。在具體實踐中,可以選擇一些自動備份和數(shù)據(jù)同步工具,如數(shù)據(jù)庫鏡像、數(shù)據(jù)副本等。

正確匹配多個數(shù)據(jù)庫是非常重要的。在企業(yè)和組織規(guī)模逐漸擴(kuò)大的情況下,正確的數(shù)據(jù)庫匹配不僅可以提高數(shù)據(jù)處理的效率和質(zhì)量,同時也可以保證數(shù)據(jù)的安全性和可靠性,為企業(yè)和組織的發(fā)展提供更可靠、高效的數(shù)據(jù)支持。

相關(guān)問題拓展閱讀:

  • 如何在django中使用多個數(shù)據(jù)庫

如何在django中使用多個數(shù)據(jù)庫

使用多個數(shù)據(jù)庫

New in Django 1.2: Please, see the release notes

大多數(shù)其他文檔都假設(shè)使用單一數(shù)據(jù)庫,本文主要討論如何在 Django 中使用多個數(shù)據(jù)庫。 使用多個數(shù)據(jù)庫,要增加一些步驟。

定義你的數(shù)據(jù)庫

使用多數(shù)據(jù)庫的之一步是通過 DATABASES 設(shè)置要使用的數(shù)據(jù)庫服務(wù)。這個 設(shè)置用于映射數(shù)據(jù)庫別名和特定的聯(lián)結(jié)設(shè)置字典,這是 Django 定義數(shù)據(jù)庫一貫的手法。 字典內(nèi)部的設(shè)置參見 DATABASES 文檔。

數(shù)據(jù)庫可以使用任何別名,但是 default 有特殊意義。當(dāng)沒有選擇其他數(shù)據(jù)庫時, Django 總是使用別名為 default 的數(shù)據(jù)庫。因此,如果你沒有定義一個名為 default 的數(shù)據(jù)庫時,你應(yīng)當(dāng)小心了,在使用數(shù)據(jù)庫前要指定你想用的數(shù)據(jù)庫。

以下是一個定義兩個數(shù)據(jù)庫的 settings.py 代碼片斷。定義了一個缺省的 PostgreSQL 數(shù)據(jù)庫和一個名為 users 的 MySQL 數(shù)據(jù)庫:

DATABASES = { ‘default’: { ‘NAME’: ‘a(chǎn)pp_data’, ‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’, ‘USER’: ‘postgres_user’, ‘PASSWORD’: ‘s3krit’ }, ‘users’: { ‘NAME’: ‘user_data’, ‘ENGINE’: ‘django.db.backends.mysql’, ‘USER’: ‘mysql_user’, ‘PASSWORD’: ‘priv4te’ } }

如果你嘗試訪問 DATABASES 設(shè)置中沒有定義的數(shù)據(jù)庫, Django 會拋出一個 django.db.utils.ConnectionDoesNotExist異常。

同步你的數(shù)據(jù)庫

syncdb 管理命令一次只操作一個數(shù)據(jù)庫。缺省情況下,它操作 default 數(shù)據(jù)庫。但是加上 –database 參數(shù),你可以讓 syncdb 同步不同的 數(shù)據(jù)庫。所頌空以要同步我們例子中的所有數(shù)據(jù)庫的所有模型可以使用如下命令:

$ ./manage.py syncdb

$ ./manage.py syncdb –database=users

如果你不是同步所有的程序到同一個數(shù)據(jù)庫中,你可定義一個 數(shù)據(jù)庫路由 來為指定的模型實施特定的控制 策略。

如果你要精細(xì)地控制同步,那么還有一種方式是修改 sqlall 的輸出,手工在 數(shù)據(jù)庫中執(zhí)行命令,命令如下:

$ ./manage.py sqlall sales | ./manage.py dbshell

使用其他管理命令

其他操作數(shù)據(jù)庫的 django-admin.py 命令與 syncdb 類似,他們一次只 操作一個數(shù)據(jù)庫,使用 –database 來控制使用哪個數(shù)據(jù)庫。

自動數(shù)據(jù)庫路由

使用多數(shù)據(jù)庫最簡單的方法是設(shè)置一個數(shù)據(jù)啟鄭庫路由方案。缺省的路由方案確保對象 “緊貼”其原本的數(shù)據(jù)庫(例如:一個對象從哪個數(shù)據(jù)庫取得,就保存回哪個數(shù)據(jù)庫)。 缺省的路由方案還確保如果一個數(shù)據(jù)庫沒有指定,所有的查詢都會作用于 缺省 數(shù)據(jù) 庫。

你不必為啟動缺省路由方案作任何事,因為它是“開箱即用”的。但是,如果你要執(zhí)行 一些更有趣的數(shù)據(jù)庫分配行為的話,你可以定義并安裝你自己的數(shù)據(jù)庫路由。

數(shù)據(jù)庫路由

一個數(shù)據(jù)庫路由是一個類,這個類最多有四個方法:

db_for_read(model, **hints)

建議 model 對象寫操作時使用的數(shù)據(jù)庫。

如果一個數(shù)據(jù)庫操作可以提供對選擇數(shù)據(jù)庫有用的附加信息,那么可以通過 hints 字典提供。詳見 下文 。

如果沒有建議則返回 None 。

db_for_write(model, **hints)

建議 model 對象讀操作時使用的數(shù)據(jù)庫。

如果一悄櫻頌個數(shù)據(jù)庫操作可以提供對選擇數(shù)據(jù)庫有用的附加信息,那么可以通過 hints 字典提供。詳見 下文 。

如果沒有建議則返回 None 。

allow_relation(obj1, obj2, **hints)

當(dāng) obj1 和 obj2 之間允許有關(guān)系時返回 True ,不允許時返回 False ,或者沒有 意見時返回 None 。這是一個純粹的驗證操作,用于外鍵和多對多操作中,兩個對象 的關(guān)系是否被允許。

allow_syncdb(db, model)

決定 model 是否可以和 db 為別名的數(shù)據(jù)庫同步。如果可以返回 True , 如果不可以返回 False ,或者沒有意見時返回 None 。這個方法用于決定一個給定 數(shù)據(jù)庫的模型是否可用。

一個路由不必提供 所有 這些方法,可以省略其中一個或多個。如果其中一個方法被 省略了,那么 Django 會在執(zhí)行相關(guān)檢查時跳過相應(yīng)路由。

提示參數(shù)

數(shù)據(jù)庫路由接收的“提示”參數(shù)可用于決定哪個數(shù)據(jù)庫應(yīng)當(dāng)接收一個給定的請求。

目前,唯一可以提供的提示參數(shù)是 實例 ,即一個與讀寫操作相關(guān)的對象的實例。 可以是一個已保存的對象的實例,也可以是一個多對多關(guān)系中添加的實例。在某些情況下, 也可能沒有對象的實例可以提供。路由會檢查提示實例是否存在,并相應(yīng)地決定是否改變 路由行為。

使用路由

數(shù)據(jù)庫路由使用 DATABASE_ROUTERS 設(shè)置來安裝。這個設(shè)置定義一個類名稱 列表,每個類定義一個用于主路由 (django.db.router) 的路由。

主路由用于 Django 分配數(shù)據(jù)庫操作。當(dāng)一個查詢想要知道使用哪個數(shù)據(jù)庫時,會提供 一個模型和一個提示(如果有的話),并調(diào)用主路由。

Django 就會按次序嘗試每個路由,

直到找到合適的路由建議。如果找不到路由建議就會嘗試實例提示的當(dāng)前的 _state.db 。如果沒有提供路由提示,或者實例沒有當(dāng)前數(shù)據(jù)庫狀態(tài),那么

主路由會 分配 缺省 數(shù)據(jù)庫。

一個例子

僅用于示例目的!

這個例子僅用于展示路由如何改變數(shù)據(jù)庫的使用。本例有意忽略了一些復(fù)雜的東西以 便于更好的展示路由是如何工作的。

如果任何一個 myapp 中的模型包含與 另一個 數(shù)據(jù)庫中模型的關(guān)系時,本例 是無效的。參見 跨數(shù)據(jù)庫關(guān)系一節(jié)中介紹 的 Django 引用完整性問題。

本例的主/從配置也是有缺陷的:它沒有處理復(fù)制延時(比如因為把寫操作傳遞給從 數(shù)據(jù)庫耗費時間而產(chǎn)生的查詢不一致),也沒有考慮與數(shù)據(jù)庫使用策略的交互作用。

那么,這個例子有什么用呢?本例僅用于演示一個 myapp 存在于 other 數(shù)據(jù)庫, 所有其他模型之間是主/從關(guān)系,且存在于 master 、 slave1 和 slave2 數(shù)據(jù)庫。本例使用了兩個路由:

class MyAppRouter(object): “”” 一個控制 myapp 應(yīng)用中模型的 所有數(shù)據(jù)庫操作的路由 “”” def db_for_read(self, model, **hints): “myapp 應(yīng)用中模型的操作指向 ‘other'” if model._meta.app_label == ‘myapp’: return ‘other’ return None def db_for_write(self, model, **hints): “myapp 應(yīng)用中模型的操作指向 ‘other'” if model._meta.app_label == ‘myapp’: return ‘other’ return None def allow_relation(self, obj1, obj2, **hints): ” 如果包含 myapp 應(yīng)用中的模型則允許所有關(guān)系 ” if obj1._meta.app_label == ‘myapp’ or obj2._meta.app_label == ‘myapp’: return True return None def allow_syncdb(self, db, model): ” 確保 myapp 應(yīng)用只存在于 ‘other’ 數(shù)據(jù)庫 ” if db == ‘other’: return model._meta.app_label == ‘myapp’ elif model._meta.app_label == ‘myapp’: return False return None class MasterSlaveRouter(object): “”” 一個設(shè)置簡單主/從定義 的路由 “”” def db_for_read(self, model, **hints): ” 所有讀操作指向一個隨機(jī)的從數(shù)據(jù)庫 ” return random.choice() def db_for_write(self, model, **hints): ” 所有寫操作指向主數(shù)據(jù)庫 ” return ‘master’ def allow_relation(self, obj1, obj2, **hints): ” 允許數(shù)據(jù)庫池中的兩個對象間的任何關(guān)系 ” db_list = (‘master’,’slave1′,’slave2′) if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model): ” 顯示地放置所有數(shù)據(jù)庫中的模型 ” return True

然后在你的設(shè)置文件增加如下內(nèi)容(把 path.to. 替換為你定義路由的模型的路徑 ):

DATABASE_ROUTERS =

這個設(shè)置中,路由的順序是很重要的,因為查詢時是按這個設(shè)置中的順序依次查詢的。上 例中, MyAppRouter 先于MasterSlaveRouter ,因此, myapp 中的模型就 優(yōu)先于其他模型。如果 DATABASE_ROUTERS 設(shè)置中兩個路由的順序變換了, 那么 MasterSlaveRouter.allow_syncdb() 會優(yōu)先執(zhí)行。因為 MasterSlaveRouter 是 包羅萬象的,這樣就會導(dǎo)致所有模型可以使用所有數(shù)據(jù)庫。

設(shè)置好之后讓我們來運行一些代碼:

>>> # 從 ‘credentials’ 數(shù)據(jù)庫獲得數(shù)據(jù) >>> fred = User.objects.get(username=’fred’) >>> fred.first_name = ‘Frederick’ >>> # 保存到 ‘credentials’ 數(shù)據(jù)庫 >>> fred.save() >>> # 隨機(jī)從從數(shù)據(jù)庫獲得數(shù)據(jù) >>> dna = Person.objects.get(name=’Douglas Adams’) >>> # 新對象創(chuàng)建時還沒有分配數(shù)據(jù)庫 >>> mh = Book(title=’Mostly Harmless’) >>> # 這個賦值會向路由發(fā)出請求,并把 mh 的數(shù)據(jù)庫設(shè)置為與 author 對象同樣的 >>> # 數(shù)據(jù)庫 >>> mh.author = dna >>> # 這會強(qiáng)制 ‘mh’ 實例使用主數(shù)據(jù)庫… >>> mh.save() >>> # … 但如果我們重新獲取對象,就會從從數(shù)據(jù)庫中獲取 >>> mh = Book.objects.get(title=’Mostly Harmless’)

手動選擇數(shù)據(jù)庫

Django 也提供一個可以讓你通過代碼完全控制數(shù)據(jù)庫使用的 API 。手動定義數(shù)據(jù)庫分配 優(yōu)先于路由。

為一個 查詢集 手動選擇一個數(shù)據(jù)庫

你可以在 查詢集 “鏈”中的任何點為 查詢集 選擇數(shù)據(jù)庫。我們通過在 查詢集 上調(diào)用 using() 來得到使用指定數(shù)據(jù)庫的另一個 查詢集 。

using() 使用一個參數(shù):你想要運行查詢的數(shù)據(jù)庫的別名。例如:

>>> # 這會運行在“缺省”數(shù)據(jù)庫上。 >>> Author.objects.all() >>> # 這同樣會運行在“缺省”數(shù)據(jù)庫上。 >>> Author.objects.using(‘default’).all() >>> # 這會運行在“ other ”數(shù)據(jù)庫上。 >>> Author.objects.using(‘other’).all()

為 save() 選擇一個數(shù)據(jù)庫

在使用 Model.save() 時加上 using 關(guān)鍵字可以指定保存到哪個數(shù)據(jù)庫。

例如,要把一個對象保存到 legacy_users 數(shù)據(jù)庫應(yīng)該這樣做:

>>> my_object.save(using=’legacy_users’)

如果你不定義 using ,那么 save() 方法會根據(jù)路由分配把數(shù)據(jù)保存到缺省 數(shù)據(jù)庫中。

把一個對象從一個數(shù)據(jù)庫移動到另一個數(shù)據(jù)庫

當(dāng)你已經(jīng)在一個數(shù)據(jù)庫中保存了一個對象后,你可能會使用 save(using=…) 把這個 對象移動到另一個數(shù)據(jù)庫中。但是,如果你沒有使用恰當(dāng)?shù)姆椒?,那么可能會出現(xiàn)意想不 到的后果。

假設(shè)有如下的例子:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) # (之一句) >>> p.save(using=’second’) # (第二名)

在之一名中,一個新的 Person 對象被保存到 first 數(shù)據(jù)庫中。這時, p 還沒有一個主鍵,因此 Django 執(zhí)行了一個INSERT SQL 語句。這樣就會創(chuàng)建一個 主鍵,并將這個主鍵分配給 p 。

在第二句中,因為 p 已經(jīng)有了一個主鍵,所以 Django 在保存對象時會嘗試在新的 數(shù)據(jù)庫中使用這個主鍵。如果 second數(shù)據(jù)庫中沒有使用這個主鍵,那就不會有問題, 該對象會復(fù)制到新數(shù)據(jù)庫。

然而,如果 p 的主鍵在 second 數(shù)據(jù)庫中已經(jīng)使用過了,那么 second 使用 這個主鍵的已存在的對象將會被 p 覆蓋。

有兩種方法可以避免上述情況的發(fā)生。之一,你可以清除實例的主鍵。如果一個對象沒有 主主鍵,那么 Django 會把它看作一個新對象,在保存到 second 數(shù)據(jù)庫中時就不會 帶來數(shù)據(jù)的損失:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) >>> p.pk = None # 清除主鍵。 >>> p.save(using=’second’) # 寫入一個全新的對象。

第二種方法是在 save() 方法中使用 force_insert 選項來保證 Django 執(zhí)行 一個 INSERT SQL:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) >>> p.save(using=’second’, force_insert=True)

這樣可以保證名為 Fred 的人員在兩個數(shù)據(jù)庫中使用相同的主鍵。如果在保存到 second 數(shù)據(jù)庫時主鍵已被占用,會拋出一個錯誤。

選擇一個要刪除數(shù)據(jù)的數(shù)據(jù)庫

缺省情況下,一個現(xiàn)存對象從哪個數(shù)據(jù)庫得到,刪除這個對象也會在這個數(shù)據(jù)庫中進(jìn)行:

>>> u = User.objects.using(‘legacy_users’).get(username=’fred’) >>> u.delete() # 會從 `legacy_users` 數(shù)據(jù)庫中刪除

通過向 Model.delete() 方法傳遞 using 關(guān)鍵字參數(shù)可以定義在哪個數(shù)據(jù)庫中刪除 數(shù)據(jù)。 using 的用法與 save() 方法中使用這個參數(shù)類似。

例如,假設(shè)我們要把一個用戶從 legacy_users 數(shù)據(jù)庫移動到 new_users 數(shù)據(jù)庫 可以使用如下命令:

>>> user_obj.save(using=’new_users’) >>> user_obj.delete(using=’legacy_users’)

多數(shù)據(jù)庫情況下使用管理器

在管理器上使用 db_manager() ,可以讓管理器訪問一個非缺省數(shù)據(jù)庫。

例如,假設(shè)你有一個操作數(shù)據(jù)庫的自定義管理器 User.objects.create_user() 。

因為 create_user() 是一個管理器方法,不是一個 查詢集 ,所以你不能

用 User.objects.using(‘new_users’).create_user() 。( create_user() 方法

只能用于 User.objects 管理器,而不能用于,管理器衍生出的 查詢集 。) 解決方法是使用 db_manager() ,就象下面這樣:

User.objects.db_manager(‘new_users’).create_user(…)

db_manager() 返回的是綁定到你指定的數(shù)據(jù)庫的管理器的一個副本。

多數(shù)據(jù)庫情況下使用 get_query_set()

如果你在管理器中重載了 get_query_set() ,請確保在其父類中也調(diào)用了相同的方法 (使用 super() )或者正確處理管理器中的 _db 屬性(一個包含要使用的數(shù)據(jù)庫 名稱的字符串)。

例如,如果你要從 get_query_set 方法返回一個自定義 查詢集 類,那么你可以 這樣做:

class MyManager(models.Manager): def get_query_set(self): qs = CustomQuerySet(self.model) if self._db is not None: qs = qs.using(self._db) return qs

在 Django 管理接口中使用多數(shù)據(jù)庫

Django 的管理接口沒有明顯支持多數(shù)據(jù)庫。如果想要支持的話你必須寫自定義 ModelAdmin 。

如果要支持多數(shù)據(jù)庫,那么 ModelAdmin 對象有五個方法要自定義:

關(guān)于怎么匹配出多個數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁設(shè)計制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。


分享題目:如何正確匹配多個數(shù)據(jù)庫? (怎么匹配出多個數(shù)據(jù)庫)
URL鏈接:http://www.5511xx.com/article/cojiodc.html