{"adoption": {"forks": 257, "observed_at": "2026-08-28T04:05:32.554468+00:00", "stars": 1760}, "canonical_url": "https://ross.abutalabs.com/products/smproxy", "card": {"archived": false, "artifact_type": "service", "description": "Swoole MySQL Proxy 一个基于 MySQL 协议，Swoole 开发的MySQL数据库连接池。 A MySQL database connection pool based on MySQL protocol and Swoole.", "domain": ["databases", "backend", "developer-tools", "self-hosted"], "enriched": true, "function": ["database", "proxy", "caching", "concurrency"], "health_score": 20, "homepage": "https://smproxy.louislivi.com", "language": "PHP", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["louislivi/SMProxy"], "name": "louislivi/SMProxy", "platform": ["php", "cli", "self-hosted"], "pushed_at": "2022-11-13T10:59:56+00:00", "repo": "louislivi/SMProxy", "stars": 1760, "tags": ["mysql-connection-pool", "swoole", "read-write-splitting", "database-middleware", "coroutines", "linux"], "topics": ["swoole", "mysql", "php", "proxy", "composer", "pool", "connections", "smproxy", "swoole-mysql-proxy", "mycat", "coroutines", "connection-pool"], "urls": [], "use_cases": ["pool mysql connections for php apps under high concurrency", "add read-write splitting to mysql without changing application code", "avoid database connection exhaustion in php-fpm deployments", "replace mycat with a lightweight mysql proxy that supports batch inserts", "reuse mysql connections across requests in swoole applications", "proxy mysql traffic across multiple databases and users"], "what_it_is": "SMProxy is a lightweight MySQL database connection pool and proxy middleware built on the MySQL protocol and the Swoole coroutine engine. It stores database connections in memory, reuses idle connections across requests, and supports read/write splitting without parsing SQL payloads like heavier middleware such as Mycat.", "when_to_avoid": ["you need full sql parsing, sharding, or advanced middleware features beyond pooling and read-write splitting", "your stack is not php/swoole-oriented or you need a proxy maintained in go or java", "you require active community development and frequent updates"], "when_to_choose": ["your php application hits mysql connection limits under high concurrency", "you need read/write splitting with a lightweight proxy that speaks the native mysql protocol", "you want connection pooling without modifying application code", "you need mysql 5.5-8.0 compatibility including transactions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/smproxy", "repo": "louislivi/SMProxy", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.554468+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:27:14.734864+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3de8b0afd807cbd68d22f51caf1a0a34b4ff32e3a6774b4a5bd04bede4558ecc", "fetched_at": "2026-08-28T04:05:32.554468+00:00", "kind": "readme", "missing": false, "url": "https://github.com/louislivi/SMProxy"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2860, "days_push": 1389, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}