<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Vona ORM分表全攻略

      分表

      針對高并發、數據量大的場景,通常會考慮采用分表機制進行優化。下面以 Model User/Order 為例,通過查詢用戶的訂單列表,來演示分表的使用方法

      分表規則

      比如需要對訂單表進行分表操作。可以根據實際業務需求設計分表規則,在這里,根據用戶Id取模動態生成表名。比如,拆分為16張表,用戶Id129,對應的表名如下:

      const tableName = `Order_${129 % 16}`;  // Order_1
      

      準備Models

      先準備兩個 Models:User/Order

      1. Model Order
      @Model({
        entity: EntityOrder,
      })
      class ModelOrder{}
      
      1. Model User
      @Model({
        entity: EntityUser,
        relations: {
          orders: $relation.hasMany(() => ModelOrder, 'userId'),
        },
      })
      class ModelUser {}
      

      查詢數據

      1. 直接查詢訂單列表

      class ServiceOrder {
        async selectOrdersDirectly() {
          const userId = 129;
          const orders = await this.scope.model.order.select({
            where: {
              userId,
            },
          });
        }
      }  
      

      到目前為止,使用默認表名查詢userId=129的訂單列表

      2. 基于關系查詢訂單列表

      class ServiceOrder {
        async selectOrdersByRelation() {
          const userId = 129;
          const userAndOrders = await this.scope.model.user.get({
            id: userId,
          }, {
            include: {
              orders: true,
            },
          });
        }
      }  
      

      到目前為止,使用默認表名查詢userId=129的用戶信息,使用默認表名查詢該用戶的訂單列表

      使用分表:動態方式

      可以在代碼中動態使用分表:

      class ServiceOrder {
        async selectOrdersDirectly() {
          const userId = 129;
      +   const tableName = `Order_${userId % 16}`;
      +   const modelOrder = this.scope.model.order.newInstance(undefined, tableName as any);
          const orders = await modelOrder.select({
            where: {
              userId,
            },
          });
        }
      }  
      
      • newInstance: 傳入要使用的表名,返回新的 Model 實例

      到目前為止,使用分表查詢userId=129的訂單列表

      使用分表:Relation動態選項

      可以在 relation 選項中動態指定表名:

      class ServiceOrder {
        async selectOrdersByRelation() {
          const userId = 129;
      +   const tableName = `Order_${userId % 16}`;
          const userAndOrders = await this.scope.model.user.get({
            id: userId,
          }, {
            include: {
              orders: {
      +         meta: {
      +           table: tableName as any,
      +         },
              },
            },
          });
        }
      }  
      
      • meta.table: 指定 relation orders要使用的表名

      到目前為止,使用默認表名查詢userId=129的用戶信息,使用分表查詢該用戶的訂單列表

      使用分表:Model配置

      也可以直接在 Model 中配置分表規則,從而簡化查詢代碼

      1. Model Order
      @Model({
        entity: EntityOrder,
      + table(_ctx: VonaContext, where: EntityOrder | undefined, defaultTable: keyof ITableRecord) {
      +   const userId = where?.userId;
      +   if (!userId) return defaultTable;
      +   return `Order_${Number(userId) % 16}`;
      + },
      })
      class ModelOrder{}
      
      • table: 指定函數,實現分表規則
      1. 查詢數據

      現在,又可以使用常規的方式查詢用戶的訂單列表

      class ServiceOrder {
        async selectOrdersDirectly() {
          const userId = 129;
          const orders = await this.scope.model.order.select({
            where: {
              userId,
            },
          });
        }
      }  
      
      class ServiceOrder {
        async selectOrdersByRelation() {
          const userId = 129;
          const userAndOrders = await this.scope.model.user.get({
            id: userId,
          }, {
            include: {
              orders: true,
            },
          });
        }
      }  
      

      使用分表:App Config配置

      也可以在 App config 中配置 Model options:

      src/backend/config/config/config.ts

      // onions
      config.onions = {
        model: {
          'test-vona:order': {
            table(_ctx: VonaContext, where: EntityOrder | undefined, defaultTable: keyof ITableRecord) {
              const userId = where?.userId;
              if (!userId) return defaultTable;
              return `Order_${Number(userId) % 16}`;
            },
          },
        },
      };
      

      于是,也可以使用常規的方式查詢用戶的訂單列表

      使用分表:Relation靜態選項

      也可以在定義 Relation 時指定靜態選項:

      @Model({
        entity: EntityUser,
        relations: {
          orders: $relation.hasMany(() => ModelOrder, 'userId', {
      +     meta: {
      +       table(_ctx: VonaContext, where: EntityOrder | undefined, defaultTable: keyof ITableRecord) {
      +         const userId = where?.userId;
      +         if (!userId) return defaultTable;
      +         return `Order_${Number(userId) % 16}`;
      +       },
      +     },
          }),
        },
      })
      class ModelUser {}
      

      同樣,也可以使用常規的方式查詢用戶的訂單列表

      Vona ORM已開源:github.com/vonajs/vona

      posted @ 2025-09-25 15:24  濮水大叔  閱讀(169)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 啦啦啦视频在线日韩精品| 精品国产午夜福利在线观看| 最新精品国偷自产在线美女足| 性动态图无遮挡试看30秒 | 中国女人高潮hd| 亚洲av永久无码精品漫画 | 另类 专区 欧美 制服| 久热这里有精品视频播放| 国产熟睡乱子伦午夜视频| 午夜成人精品福利网站在线观看| 午夜性刺激在线观看| 久久亚洲女同第一区综合| 玩弄放荡人妻少妇系列 | 东至县| 亚洲一区二区精品偷拍| 久久久久久久久久久久中文字幕 | 国产无遮挡猛进猛出免费| 久久99久国产精品66| 久久精品国产色蜜蜜麻豆| 成人做受120秒试看试看视频| 国产卡一卡二卡三免费入口| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲乱码日产精品bd在线| 亚洲欧洲∨国产一区二区三区| 国产乱人对白| 中文字幕久久人妻熟人妻| 亚洲中文字幕人妻系列| 久久天天躁狠狠躁夜夜躁2020| 内射无套内射国产精品视频| 热久久美女精品天天吊色| 成人自拍小视频在线观看| 亚洲日本欧美日韩中文字幕| 亚洲嫩模喷白浆在线观看| 欧美成人精品手机在线| 97免费在线观看视频| 亚洲第一视频区| 黄瓜视频在线观看| 免费观看欧美猛交视频黑人| 乱人伦人妻系列| 中文字幕在线观看亚洲日韩| 日韩有码中文字幕一区二区|