English 中文(简体)
建立硬性数据库——没有交叉数据库查询
原标题:Setting up database sharding - no cross-database queries

我开发了一个网络应用程序,对每个客户(一个小型组织)来说,他们无法(也不应该)查询其他客户的记录。

在单一数据库中保存数据是容易的,使更新和维护变得简单(直到我陷入可衡量的问题)。 但是,我现在想听从未来。 如果每个客户的数据都包含在单独的数据库中,每个客户都会有更好的业绩,并且应当更好地加以推广。 我不敢肯定,它是否等同于数据库“硬化”,因为I m没有在多个数据库中分割单一图象。 我基本上每个数据库都有一个单一的图象(如在你将软件上载到一个CD的当天——每个有自己的数据库)。

我已读到这里,因此我对一般概念有看法。 但是,我头上有许多问题。 我不确切地说,这一进程是多么透明。 或者,如果我想要进行变革的话,我将着手修缮数以百计的chem。

其实,我只是寻找一个简单的“完整”例子(全心全意使用泉/j)。

  1. 我想,我可以有一个单一的应用服务器,从单一数据来源开始,我要说的是一张单张图表,显示一个数据库的使用。

    • userid
    • database/shard-id

    每一项要求(顺序)都无视数据库的ach,是否必须寻找用户的硬id? 或者,在每届会议开始时,它能做一次直接谈论目标数据库? (由于你可能无法用服务器的侧面 st来显示Im。)

  2. 一个人能否高度概述在春天可能如何做到这一点? 目前,我的架构非常简单。 我的春天组成部分是DAO,使用破碎的模版。 投放了DAO的数据来源(数据来源按应用目录配置)。 DAO的电线进入我的服务班级。 标准 st。

  3. 我要说的是,我前面的一步是行之有效的,现在我不得不改变这个表象。 在那里是否有管理工具,我可以一劳永逸地应用图象变化,并传播到100个其他数据库?

I m using MySQL. I believe "MySQL Proxy" might be able to solve problems 1 and 2. Does anyone have any experience with this? I suppose it cannot handle managing schema updates so I may have to roll my own solution.

感谢!

问题回答

我在公司使用春天和辛苦的思想是:

  1. You would implement a ShardDataSourceManager that would be basically pool of connection pools and you would lookup a data-source by shard id.
  2. You would define your own Transactional annotations and annotate methods with it
  3. You need to write an interceptor at dao layer that would read annotations on method and some context info. From the context info you would lookup shard id and lookup data-source and inject into a thread local.
  4. The dao layer when it looks up data-source would look into thread local to construct a jdbc template and execute queries on it.

I dont know spring much so cant talk much about it. But for database sharding, I suggest you have a look at this post on High Scalability

New Relic Architecture - Collecting 20+ Billion Metrics a Day

它就冰雪硬化战略及其如何在负荷不同时提供帮助进行了讨论。 另见commentssection,他在其中详细介绍了艰苦条件。

我可以不谈春,因为我没有这样做。

如果是我的话,我用 Java·埃塔的话说,我只是使用JNDI数据来源,为每个客户创造一个数据来源,并通过客户名称或你为区分客户而重新使用的任何识别信息来看待这一数据。

现在,我确信,在春天可以做些什么,我可以告诉大家如何做。

共同数据库连接库的安装处理“100个数据库”,尽管有许多链接,但也是一个不同的问题(考虑到几百个开放式连接表)。 我要么不谈,要么没有这样做。

但此后,由于每个集合点都有一个单独的数据库,因此,你基本上都做了改动。 每个人才库都有自己的配置,以便你们能够把银行转移到不同的东道国等。

这将是我对问题的首次削减,直到它没有受到考验,但我猜测,失败点将是非行的集合执行或与此有关。 任何其他东西都是非专利的亚洲开发银行服务器和 Java。

您可使用DDAL,在DAL实施不同的数据库,而它并不依赖春季数据来源和交易管理。 还有一个示范项目来展示如何使用:。 你可以尝试。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签