V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wlee1991
V2EX  ›  数据库

这样的需求 数据库怎么设计 最好 ???

  •  
  •   wlee1991 · 2015-12-21 09:58:55 +08:00 · 1091 次点击
    这是一个创建于 3042 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 mysql 数据库

    同时服务于 1000 家公司

    每家公司都是多用户,多权限,但是各家公司数据不相互影响

    最初的想法是为每家公司都设置一个 companyID ,这样的话所有数据库的操作都要带上 companyID ,有没有更优的设计?

    查过一些资料,貌似还要考虑表锁定、行锁定

    请 architecture 高手帮忙指点多谢

    第 1 条附言  ·  2015-12-25 10:19:44 +08:00
    感谢各位的热心回复...

    其实我更想要得是一个 demo 或者 github 上的某个 example....
    12 条回复    2015-12-24 22:56:14 +08:00
    klesh
        1
    klesh  
       2015-12-21 10:38:33 +08:00
    各自独立的库
    heaton_nobu
        2
    heaton_nobu  
       2015-12-21 10:46:24 +08:00
    除了账户外其他还有什么数据?需要共用吗?
    wy315700
        3
    wy315700  
       2015-12-21 10:57:20 +08:00
    每个公司一个数据库,
    aisk
        4
    aisk  
       2015-12-21 10:58:00 +08:00
    每个公司开个新库?
    lynnworld
        5
    lynnworld  
       2015-12-21 11:00:26 +08:00
    每个公司一个独立数据库, wordpress.com 就是这样。扩容也方便。统计性的工作通过数据冗余到一个额外独立数据库上。
    wlee1991
        6
    wlee1991  
    OP
       2015-12-21 12:32:51 +08:00
    @wy315700
    @aisk
    @lynnworld

    假如 1000 家公司,后台用 Hibernate 同时连接 1000 个数据库?这样量大了以后假如 1 万家,就有 1 万个连接,性能等等要考虑吗
    loading
        7
    loading  
       2015-12-21 12:36:45 +08:00 via Android
    独立数据库
    最起码也要表分开,用户名分开,设置好权限。
    wy315700
        8
    wy315700  
       2015-12-21 12:37:04 +08:00 via Android
    @wlee1991 上中间件
    loading
        9
    loading  
       2015-12-21 12:37:57 +08:00 via Android
    如果访问量不大,写个 api ,方便很多。
    NetCobra
        10
    NetCobra  
       2015-12-21 14:02:30 +08:00
    @wlee1991 你要只有几个公司,一个库里面用 ID 区分每个用户没问题;真要到了 1000 家公司,一个数据库是绝对撑不住的。

    每个公司一个库,在技术上是更好的方案,但是成本也会是很高的;不过你如果真的有 1000 家公司成为你的客户,这个成本是绝对值得付出的。

    所以考虑一下你现在是否真的要为 1000 个公司的时候做准备,屠龙刀很好,但是用来杀鸡实在没有必要。
    billwang
        11
    billwang  
       2015-12-22 00:02:16 +08:00
    一千家公司?只是网站应用吗?如果是业务应用,劝你还是分库或者用 Oracle 等数据库的好。
    darluc
        12
    darluc  
       2015-12-24 22:56:14 +08:00
    # 根据数据量大小选择分表或分库。
    # 根据公司 ID 进行路由选择。
    # 想要把各自的东西分清楚,最简单的方式就是别把它们堆放在一起。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3590 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:01 · PVG 13:01 · LAX 22:01 · JFK 01:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.