多租户CRM系统中分表以及如何触发生成表和数据的问题。
我们公司现在在做一个多租户的crm管理系统。由于数据量已经很大,最近开始考虑分库分表的问题。
对于多租户的crm系统,目前有三种主要的数据库组织方式:
1.单一租户独享单一数据库。
2.单一数据库下单一租户独享单一schema
3.多租户共享单一数据库(用租户id来区分它们的数据)
基于各方面考虑,我们目前采用了第二种方式:在单一数据库中,每个租户都有自己的一套数据表。每一张表的表名,都采用【表名+租户id】的方式。
但是,在数据库结构确定之后,接下来遇到几个问题没有想明白。就是:
1.这些表该如何进行管理?用php代码来管理还是在mysql端有这样的中间件?
2.新注册租户的数据表,该在什么时候触发生成?(目前采用的触发位置,是在新用户注册的时候,直接生成他的用户表、菜单表之类的。而当他用到其他的功能的时候,再生成相关功能的表,总感觉这种方式有问题,有没有更好的处理方式?)
有没有做过多租户CRM系统的技术大神,给点意见?在此万分感激了
回复内容:
我们公司现在在做一个多租户的crm管理系统。由于数据量已经很大,最近开始考虑分库分表的问题。
对于多租户的crm系统,目前有三种主要的数据库组织方式:
1.单一租户独享单一数据库。
2.单一数据库下单一租户独享单一schema
3.多租户共享单一数据库(用租户id来区分它们的数据)
基于各方面考虑,我们目前采用了第二种方式:在单一数据库中,每个租户都有自己的一套数据表。每一张表的表名,都采用【表名+租户id】的方式。
但是,在数据库结构确定之后,接下来遇到几个问题没有想明白。就是:
1.这些表该如何进行管理?用php代码来管理还是在mysql端有这样的中间件?
2.新注册租户的数据表,该在什么时候触发生成?(目前采用的触发位置,是在新用户注册的时候,直接生成他的用户表、菜单表之类的。而当他用到其他的功能的时候,再生成相关功能的表,总感觉这种方式有问题,有没有更好的处理方式?)
有没有做过多租户CRM系统的技术大神,给点意见?在此万分感激了
如果是我,肯定先用软件解决初始化schema的逻辑,这样最快实现目的。后续根据实际情况再考虑使用中间件。
至于触发初始化的动作的时机,要看你初始化动作需要消耗的资源和时间了。如果消耗可以忽略不计,那新租户注册成功就立刻初始化;如果比较耗时耗资源,就定期cron去跑(业务上需要租户从注册到使用有个间隔,比如注册审核)。
按我的经验,仅仅是创建几十张表甚至几百张表(MySQL),耗费不了多少资源的~一眨眼的时间都用不了

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL에서 외국 키의 기능은 테이블 간의 관계를 설정하고 데이터의 일관성과 무결성을 보장하는 것입니다. 외국 키는 참조 무결성 검사 및 계단식 작업을 통해 데이터의 효과를 유지합니다. 성능 최적화에주의를 기울이고 사용할 때 일반적인 오류를 피하십시오.

MySQL과 Mariadb의 주요 차이점은 성능, 기능 및 라이센스입니다. 1. MySQL은 Oracle에 의해 개발되었으며 Mariadb는 포크입니다. 2. MariaDB는 높은 하중 환경에서 더 나은 성능을 발휘할 수 있습니다. 3. Mariadb는 더 많은 스토리지 엔진과 기능을 제공합니다. 4.MySQL은 듀얼 라이센스를 채택하고 MariaDB는 완전히 오픈 소스입니다. 선택할 때 기존 인프라, 성능 요구 사항, 기능 요구 사항 및 라이센스 비용을 고려해야합니다.

SQL은 관계형 데이터베이스를 관리하는 표준 언어이며 MySQL은 SQL을 사용하는 데이터베이스 관리 시스템입니다. SQL은 CRUD 작업을 포함한 데이터베이스와 상호 작용하는 방법을 정의하는 반면 MySQL은 SQL 표준을 구현하고 저장 프로 시저 및 트리거와 같은 추가 기능을 제공합니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

Laravel과 YII의 주요 차이점은 설계 개념, 기능적 특성 및 사용 시나리오입니다. 1. Laravel은 개발의 단순성과 즐거움에 중점을두고 Eloquentorm 및 Artisan 도구와 같은 풍부한 기능을 제공하며 빠른 개발 및 초보자에게 적합합니다. 2.YII는 성능과 효율성을 강조하고, 고 부하 애플리케이션에 적합하며, 효율적인 Activerecord 및 캐시 시스템을 제공하지만 가파른 학습 곡선이 있습니다.

Nginx와 Apache는 각각 고유 한 장점과 단점이 있으며 선택은 특정 요구에 기초해야합니다. 1.NGINX는 비동기 비 블로킹 아키텍처로 인해 높은 동시 시나리오에 적합합니다. 2. Apache는 모듈 식 설계로 인해 복잡한 구성이 필요한 저소성 시나리오에 적합합니다.

MySQL 및 Phpmyadmin은 다음 단계를 통해 효과적으로 관리 할 수 있습니다. 1. 데이터베이스 작성 및 삭제 : Phpmyadmin을 클릭하여 완료하십시오. 2. 테이블 관리 : 테이블을 만들고 구조를 수정하고 인덱스를 추가 할 수 있습니다. 3. 데이터 작동 : 삽입, 업데이트, 데이터 삭제 및 SQL 쿼리 실행을 지원합니다. 4. 가져 오기 및 내보내기 데이터 : SQL, CSV, XML 및 기타 형식을 지원합니다. 5. 최적화 및 모니터링 : 최적화 가능한 명령을 사용하여 테이블을 최적화하고 쿼리 분석기 및 모니터링 도구를 사용하여 성능 문제를 해결하십시오.

MySQL을 안전하고 철저하게 제거하고 모든 잔차 파일을 정리하려면 다음 단계를 따르십시오. 1. MySQL 서비스 중지; 2. MySQL 패키지 제거; 3. 구성 파일 및 데이터 디렉토리를 정리하십시오. 4. 제거가 철저한 지 확인하십시오.
