在Laravel 4中动态创建新数据库
我想动态创建新的数据库,数据库用户和特权密码,为每个新用户在Laravel 4中即时在新数据库中创建一些表.这是针对多人租户网站的. 最好的解决方案是什么? 谢谢. 解决方案 这不是您的第一个数据库连接,而是简单的,但是您必须执行原始语句,因为数据库创建不可用作为连接方法: DB::statement(DB::raw('CREATE DATABASE ')); 为此,您可以使用辅助连接: 'mysql', 'connections' => array( 'mysql' => array( 'driver' => 'mysql', 'host' => 'host1', 'database' => 'database1', 'us
0 2023-06-03
编程技术问答社区
我如何在运行时连接到不同的数据库?
我正在制作一个具有一个中央数据库和许多子数据库的多租户多数据库应用程序. 该应用程序在中央数据库中创建一个组织的实例,并向每个组织创建一个具有不同表的子数据库. 为了实现这一目标,我做了一个班级Setup 创建组织 创建其数据库 配置与该数据库的连接并连接到它 运行适当的迁移. 全部包裹在构造函数中,因此镇定Setup::create所有这些都正确运行. 大多数数据库配置和连接是从此教程. 要测试我的逻辑是否按照想要的方式进行,我通过: 与我的应用程序进行了互动 修补匠 Web浏览器. 对于我的惊喜而言,结果在两种情况下都是不同的,并且就连接到另一个数据库而言从来没有想要. 与修补匠的相互作用: 创建我的Setup::create并在输出告诉我一切正常之后,我尝试检查自己我现在使用的数据库: DB::connection()->getDatabaseName() 它输出了我们刚刚为组织创建并连接到的子数据库名称,
0 2023-06-03
编程技术问答社区
如何在laravel的数据库.php文件中动态追加连接?
我需要使用php代码在数据库中的动态连接,是否可能? 解决方案 它对我有用 当我创建新客户时 public function setConnection($tenantName){ //GET Database Connection file path $path = config_path('database.php'); //GET Database Connection file $arr = include $path; // load the array from the file $new_connection=[ 'driver' => 'mysql', 'host' => env('DB_HOST'), 'databas
0 2023-06-03
编程技术问答社区
Symfony2-创建一个Doctrine过滤器来选择当前用户数据
我正在使用Symfony 2构建SaaS/Multidenant应用程序. . 现在,我需要实施某种过滤器,因此当用户登录时,他只能从公司中看到数据.我的第一个是使用学说预加载事件,但是这个事件不存在……据我所知,我必须使用学说过滤器,不是吗?如果是这样,该过滤访问用户数据如何读取公司ID?我必须使用依赖注入注入它吗?有什么标准的方法可以实现我的目标吗? 更新 我正在寻找的是创建某种学说插件/钩子,因此每次我调用从数据库获取数据的任何函数(find,findOneby等),而我要获取的实体会实现特定的接口,一个额外的接口'and Company_id =:ID'SQL序列都添加到生成的查询中,因此控制器或模型均未接收其他公司的数据. 解决方案 为此,您可以使用一个教义滤波器 链接来自官方doc namespace Rwmt\Bundle\RwmtBundle\DoctrineFilters; use Doctrine\ORM\Mapping\ClassMetaData
0 2023-05-30
编程技术问答社区
如何在Laravel 5中使用orchestral/tenanti构建具有多个数据库的多租户应用程序?
我正在尝试使用Laravel 5来构建和应用.它应该是使用多个数据库的多租户数据库体系结构.我的雇主需要此出于安全目的. 我尝试手动管理主要数据库迁移和租户迁移,但失败了.因此,我决定借用特定于Laravel的包裹的帮助. tenanti 提供了一种解决目标的方法,但问题是我是新手开发人员,无法完全完全了解如何在我的应用程序中使用它. 我已经正确安装了它,我相信这样做: composer require "orchestra/tenanti=~3.0" 在配置应用程序中添加这些提供商和别名: 'providers' => [ // ... Orchestra\Tenanti\TenantiServiceProvider::class, Orchestra\Tenanti\CommandServiceProvider::class, ], 'aliases' => [ 'Tenanti' => Orchestra\Su
2 2023-05-30
编程技术问答社区
具有独立数据库的Laravel 5多租户应用程序用户可以访问多个安装
在过去的几年中,我开发了一个非常定制的PHP/MySQL应用程序,该应用程序用于许多客户.到目前为止,我一直在为每个客户创建一个新的数据库和新安装. 这里的第一个明显问题是将多个安装与任何代码更改保持最新.第二个问题是每个安装都有大量用户.对于大多数客户;其中一些用户是相同的 - 他们必须有许多独立的用户帐户和URL要记住. 我目前正在将应用程序转移到Laravel 5,并研究了多租户的最佳实现;因此,请寻找有关最佳实施的一些建议.我以前曾使用过Laravel,但绝不是专家. 这就是我在设置方面的想法. 1个主数据库,该数据库可容纳: 所有用户帐户信息 访问控制表 - 用户可以访问哪些安装;他们在该安装上的用户级别是多少. 每个安装的配置表 - 数据库连接信息,基本配置等. 然后,每个安装的分开数据库,其中包含所有需要并提交给该安装的信息. 理想的设置是用户可以转到子域,即installationName.appname.com;登录其主登录
2 2023-05-30
编程技术问答社区
中间件的拉维顺序(中间件优先级)。使用Postgres的多租户
在 web.php 中,我在中间件中切换了Postgres模式,因为已提出了HTTP请求的子域类型.这样: Route::group( [ 'domain' => '{tenant}.' . config('app.url'), 'middleware' => 'select-schema' ], function () { $this->get('/', 'HomeController@index')->middleware('auth'); } ); 在 select-schema 中间件中,我做这样的事情.这可以正常工作. (不用担心) DB::select('SET search_path TO ' . {tenant}); 我的主要问题是:对于public> public架构和任何individual tenant,我与众不同.在individual tenant中,我有
0 2023-05-28
编程技术问答社区
使用多个数据库运行Laravel队列
我有Laravel 5项目.这是多租户项目,因此我有一个具有多个数据库的文件夹项目. 当我使用php artisan queue:listen时,它仅适用于当前数据库设置.我使用database队列驱动程序,因此每个租户都有自己的通知表.如何设置队列侦听器检查所有数据库作业? 解决方案 如果要继续使用database驱动程序,我建议设置另一个包含所有排队工作和失败作业的数据库. 尽管它不在配置中或文档中提到,但在查看代码后,看起来您应该能够在队列配置中添加connection参数,然后队列将与该连接指定的数据库. 因此,在您的config/database.php中,为您的队列数据库定义了一个新连接: 'connections' => [ // your existing connections 'queue' => [ 'driver' => 'mysql', 'database' => 'your-qu
4 2023-05-28
编程技术问答社区
多租户PHP SaaS--为每个客户提供独立的数据库,还是将它们分组?
您必须在这里忍受我的某些术语有些错误,因为我甚至都不知道这属于整个"多租户"软件作为服务'类别,但是在这里做. 我已经为客户开发了一个会员系统(以PHP为单位).我们现在正在考虑为我们的其他客户提供完全托管的解决方案,提供子域(甚至是他们自己的域). 我似乎在表上有选项,就数据存储而言是: 选项1 - 将所有内容存储在1个大数据库中,并且在需要它的表上包含一个'client_id'字段(将有大约30个表格适用),并且有一个"客户"表存储其主要设置,详细信息等以及映射到它们的域.然后,这只是设置一个包含其单个客户端ID的全球可访问变量 - 我显然必须修改每个查询才能检查客户端_id列. 选项2 - 具有带有"共享参考"表和"客户端"表的主表.然后具有其他数据库的"块",每个数据库都包含10个客户.客户端将获得自己的数据库表,并以其客户ID为前缀.这增加了一些安全性,以防止如果某些问题确实出错,请不要查看其他客户数据. 选项3 - 与选项2完全相同,除了您对每个
0 2023-05-28
编程技术问答社区
在多租户数据库中对租户ID进行索引
我正在为应用程序创建一个多租户数据库.我在每种桌子方法中都选择了thantid,而且效果很好.我处于性能调整阶段. 我的问题是,每个表中的每个tenantid是否应该索引以进行优化搜索,因为DB上的每个查询都会过滤在此列上? 期待任何建议. 谢谢 解决方案 尽管在索引(根据我的经验)索引时需要进行许多考虑,但(唯一)群集索引效果很好,因为tenantId + PK所有PK查询都可以在复合键上寻找. 这具有将tenantid放入非集群索引中的额外优势,因为SQL Server使用群集键作为从非集群索引回到表的引用. 不过,请注意页面拆分,由于插入物几乎总是中页,因此这种方法绝对优化了读取.考虑70的填充系数并观察您的碎片,请确保对适当的索引维护(无论如何您都想要) 祝你好运. 其他解决方案 对于使用设计的多租户性质的每个查询,您都需要拥有一个包括TenantID在内的索引.问题是,在索引结构中应在哪里发生tenantid?当然,答案取决于
2 2023-05-23
编程技术问答社区
多租户SQL Server数据库和参数嗅探
我在SQL Server 2012中有一个多租户数据库,其中每个租户的行都由tenant_id列标识(aka 共享数据库,共享模式方法).一些租户,尤其是较新的租户,行很少,而另一些则有很多. SQL Server的查询优化器通常会根据其第一次执行过程中提供的参数构建查询计划,然后重复此计划,即使提供了不同的参数.这被称为参数sniffing . 我们在数据库中遇到的问题是,SQL Server有时会根据指向较小租户的参数构建这些计划,该计划适合该租户,但是当它重新申请缓存的计划到较大的租户时,它会在灾难性上失败. (实际上,通常会说出来).通常,只有当我们的一个较大的租户与我们遇到超时错误联系时,我们才会发现这种情况,然后我们必须进入系统并手动刷新所有查询计划以纠正它. 有一个查询提示,您可以用来防止SQL Server缓存查询计划( OPTIMIZE FOR UNKNOWN ),但这会导致一些额外的开销,因为每次调用查询时都会再生查询计划.另一个问题是,我们正在使用
多租户应用程序中的MyBatis弹簧
嗨,需要在多人租户中使用Mybatis Spring的帮助 应用... 有可能吗?特别是因为我看不到如何 可以使用SQLSessionFactory配置" MappersCannerConfigurer" 运行. 解决方案 这是另一种使用插件(又称Interceptor)切换"架构"或"目录"的方法. 根据您使用的数据库,每个租户都有自己的数据库或架构. 一些例子: mysql:每个租户都有自己的"数据库",插件应致电setCatalog. oracle:每个租户都有自己的"架构",插件应致电setSchema. SQL Server:每个租户都有自己的"数据库",插件应致电setCatalog. 假设您通过ThreadLocal通过租户ID,这是示例插件实现. import java.sql.Connection; import org.apache.ibatis.executor.statement.StatementHandler; im
8 2023-05-22
编程技术问答社区
SQL Server -是一个基于GUID的PK,支持基于租户的水平分区的最佳实践。
我试图弄清楚什么是设计多租户数据库架构,将来需要水平分区. 数据库上的一些粗糙数字.. 租户总数约为10,000.每个租户存储的数据量在500MB-> 3GB之间变化.租户的数量将较小,并在几年内增长到10,000,因此我们最初可以从一个多租户数据库开始 原因. 更新 - 一个复杂的因素是偶尔租户(公司)可以合并,我也需要支持这一点..., 将使用共享数据库,共享模式架构实施多租金noreferrer"> http://msdn.microsoft.com/en-us/library/aa479086.aspx 鉴于将来我们会面对水平分区,并且很可能会将客户从一个数据库转移到另一个数据库,然后再解决问题,所以我认为最好将GUID用作主要钥匙在每个桌子上以及独特的tenantid列. 我知道使用GUIDSAS是一个主要的关键,但我只需要接受这一权衡吗?是否有另一种设计用于水平分区的方法? 一个例子 - 可以说,我想将来与租户100和200合并公司,
0 2023-05-20
编程技术问答社区
掌握动态数据源的Spring Boot jpa多租户服务
我正在尝试创建一个多租户Web应用程序,并找到了一个好教程在这里.这解释了我如何配置MVC以找到新的租户(使用CurrentTenantIdentifierResolver和扩展HandlerInterceptorAdapter>>>>>>的多额定信息),如何为三个不同的租户配置三个不同的数据源,以及如何将正确的数据源用于服务器的正确数据源通过扩展AbstractDataSourceBasedMultiTenantConnectionProviderImpl 来运行时 现在,这是一个很好的起点,使我了解春季和冬眠的工作中的多个租约,但是我想进一步推动这一点,我想做到这一点,以便租户完全充满活力,即我不要对申请可以有多少租户做出假设. 这就是我的想法: 该应用程序的配置为扫描启动时的路径(例如/usr/data/config),并在各种目录(每个租户的一个目录)下找到各种应用程序. TENANTA,TENANTB,TENANTC ... 对于每个应用程序.Properti
0 2023-05-16
编程技术问答社区
Hibernate复合键和重叠字段-如何避免列的重复
我面临有关如何管理特定模型映射的问题. 这是一个多授予的应用我的问题...). 模型如下: +--------------------+ +---------------+ | Book | | Author | +--------------------+ +---------------+ | id (pk) | | id (pk) | | tenant_id (pk)(fk) | | tenant_id (pk | | author_id (fk) | | name | | title | +---------------+ +--------------------+ 您可以看到,租户ID在每个实体中,也是主要键的一部分.我们使用@idclass来管理复合键.这是代码: @Data
2 2023-05-16
编程技术问答社区
Spring Boot + Hibernate多租户: @Transactional不工作
我有一个Spring Boot 2 + Hibernate 5多租户应用程序,该应用程序连接到单个PostgreSQL数据库.我已经根据这些指南进行了设置: ,只要我在击中控制器端点之前将thantid设置在过滤器或拦截器中. 但是,我需要在控制器内部设置租户,如下: @RestController public class CarController { @GetMapping("/cars") @Transactional public List getCars(@RequestParam(name = "schema") String schema) { TenantContext.setCurrentTenant(schema); return carRepo.findAll(); } } ,但此时已经检索了连接(对于公共模式),设置TenantContext没有效果. i认为@
4 2023-05-16
编程技术问答社区
Java gRPC 定制客户端负载平衡
我使用GRPC编写Java应用程序.当我在文档中查看时: https://github.com/grpc/grpc/blob/master/doc/load-balancing.md 和在博客中: https://grpc.io/blog/blog/grpc-load-load-balancing 有一些可用的GRPC 应用程序级别客户端负载平衡器: grpclb pick_first Round_robin 它们都不适合我的需求.我需要实现一个自定义. 问题是我找不到如何做 - 不是在文档中,也不是在Google搜索/stackoverflow中. 在应用程序中,每个服务器为几个租户提供服务.当创建新的租户并达到每台服务器租户的最大限制时 - 需要启动新服务器. 我在这里看到2个问题,我需要解决: 当新服务器动态启动时 - 如何将新的HTTP/2连接从客户端添加到此服务器(据我了解 - 这意味着添加新的子渠道)? 我需要用它使用的租户名将
2 2023-05-15
编程技术问答社区
类型ORM。在运行时为EntityManager(或资源库)动态地设置数据库模式?
情况: 对于我们的SaaS API,我们使用基于架构的多态,这意味着每个客户(〜tenant)拥有自己的独立 schema 在同一(Postgres)数据库中,而不会与其他客户干扰.每个模式由相同的基础实体模型组成. 每次将新客户注册到系统中,DB中会自动创建一个新的隔离架构.这意味着,该架构是在运行时创建的,并且不提前知道.客户的模式根据客户的域名命名. 对于到达我们API的每个请求,我们从JWT提取用户的租赁 - 附属物,并确定用于执行该租户执行请求的DB操作的DB-Schema. 问题 通过const orders = await this.entityManager .createQueryBuilder() .select() .from(`${tenantId}.orders`, 'order') //
0 2023-05-14
编程技术问答社区
使用Hibernate 4.2和Spring 3.1.1设置MultiTenantConnectionProvider
我目前正在尝试使用单独的架构abreach设置冬眠. 在研究了大约2天之后,几乎可以通过Google浏览所有来源,我开始感到非常沮丧. 基本我正在尝试遵循Hibernate DevGuide中提供的指南 为什么我的mssqlmultitenantConnectionProvider的配置(属性props)方法从未被调用.从我从不同其他Connection -Provider实现的来源和描述中解释的内容,我假设此方法将被调用以初始化连接推销员. 由于我无法使用配置(属性道具),因此我尝试了其他方法的其他方法,以获取在应用程序上下文和Hibernate.cfg.xml中指定的Hibernate属性和数据源. (就像将数据源直接注入连接式产品) 任何指示可以解决此问题的可能方法(方法,类,教程) 所以这是我实施的相关部分: 数据源和Hibernate.cfg.xml:
0 2023-05-14
编程技术问答社区
多租户支持。Umbraco与Orchard项目
我目前正在使用较旧版本的Umbraco(4.03),并且在同一IIS应用程序下运行了几个基本站点(主要是1个传呼机). 我有一个与Winhost.com共享的托管帐户,该帐户不提供多个站点应用程序根,只是域指针,因此我仅限于支持多租赁的单个CMS安装. Umbraco多租赁设置有点骇人听闻,我确实需要升级.果园似乎更专注于多租户支持.我的Umbraco安装在共享皮肤上有一些问题,这总是有点烦人. 所以,基本问题: 仅基于多种租赁方案,是否有人拥有umbraco和果园的经验,可以给我一个意见/比较?如果是这样,新版本的Umbraco是否比我在多站点支持方面使用的版本更好? P.S.我知道有关两个CMS项目之间的比较已经有一些问题,但我特别对多租户比较感兴趣. 解决方案 让我首先说果园是一个出色的CMS,从我到目前为止,我更喜欢它而不是Umbraco. 但是,一个警告,我在廉价共享托管上运行一个很小的果园网站(实际上我也使用了Winhost)问题,
2 2023-05-14
编程技术问答社区