You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取使用最少的代理ID,实现账户分配最少使用代理的方法

Got it, let's work through how to solve this proxy assignment problem. The core idea is to evenly distribute accounts across proxies, always prioritizing the one with the least current usage. Here are two solid approaches depending on your tech stack:

Pure SQL Implementation (PostgreSQL Example)

If you prefer handling this directly in the database, window functions make this straightforward. This solution will:

  1. Calculate how many enabled accounts are using each proxy
  2. Rank proxies by their usage count (lowest first, then by proxy ID as a tiebreaker)
  3. Assign proxies to enabled accounts in a round-robin fashion starting with the least-used ones
WITH ranked_proxies AS (
    -- Rank proxies by usage count (lowest first) and ID
    SELECT 
        id,
        ROW_NUMBER() OVER (ORDER BY usage_count ASC, id ASC) AS proxy_rank
    FROM (
        -- Count how many enabled accounts use each proxy
        SELECT 
            p.id,
            COUNT(a.id) AS usage_count
        FROM Proxy p
        LEFT JOIN Account a ON p.id = a.proxy_id AND a.enabled = TRUE
        GROUP BY p.id
    ) proxy_usage
),
ranked_accounts AS (
    -- Assign a rank to each enabled account, and get total proxy count
    SELECT 
        id,
        ROW_NUMBER() OVER () AS account_rank,
        (SELECT COUNT(*) FROM ranked_proxies) AS total_proxies
    FROM Account
    WHERE enabled = TRUE
)
-- Update each account's proxy_id with the appropriate least-used proxy
UPDATE Account a
SET proxy_id = (
    SELECT id 
    FROM ranked_proxies rp
    WHERE rp.proxy_rank = ((ra.account_rank - 1) % ra.total_proxies) + 1
)
FROM ranked_accounts ra
WHERE a.id = ra.id;

Python Script Implementation

If you want more flexibility (like adjusting tiebreakers, handling edge cases dynamically, or supporting multiple database types), a Python script is a great option. This example uses psycopg2 for PostgreSQL, but you can adapt it to SQLite, MySQL, etc., with minimal changes.

import psycopg2
from itertools import cycle

# Connect to your database (update credentials as needed)
conn = psycopg2.connect(
    dbname="your_database",
    user="your_user",
    password="your_password",
    host="localhost"
)
cur = conn.cursor()

# Fetch proxies sorted by usage count (lowest first) and proxy ID
cur.execute("""
    SELECT p.id
    FROM Proxy p
    LEFT JOIN Account a ON p.id = a.proxy_id AND a.enabled = TRUE
    GROUP BY p.id
    ORDER BY COUNT(a.id) ASC, p.id ASC
""")
proxies = [proxy[0] for proxy in cur.fetchall()]

# Exit early if there are no proxies to assign
if not proxies:
    print("No proxies available to assign!")
    cur.close()
    conn.close()
    exit()

# Create a cycle iterator to loop through proxies repeatedly
proxy_cycle = cycle(proxies)

# Fetch IDs of all enabled accounts that need proxy assignment
cur.execute("SELECT id FROM Account WHERE enabled = TRUE")
account_ids = [acc_id[0] for acc_id in cur.fetchall()]

# Update each account's proxy_id
for acc_id in account_ids:
    selected_proxy = next(proxy_cycle)
    cur.execute(
        "UPDATE Account SET proxy_id = %s WHERE id = %s",
        (selected_proxy, acc_id)
    )

# Commit changes and clean up
conn.commit()
cur.close()
conn.close()
print("Proxy assignment completed successfully!")

Edge Cases to Consider

  • No proxies in the Proxy table: Both solutions handle this (the SQL will do nothing, the Python script exits early)
  • No enabled accounts: The operations will skip updating anything
  • Tied usage counts: Both approaches use proxy ID as a tiebreaker, but you can adjust the ORDER BY clause to use proxy IP/port instead if needed
  • Disabled accounts: Both solutions only consider enabled = TRUE accounts, which aligns with your example

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:26:51