极限分片:每个用户一个SQLite数据库

极限分片:每个用户一个SQLite数据库,第1张

概述我正在开发一个Web应用程序,它在电子邮件服务和社交网络之间。我觉得它有潜力在未来成长真的,所以我关心可扩展性。 而不是使用一个集中的MySQL / InnoDB数据库,然后在那段时间进行分区,我决定为每个活动用户创建一个单独的SQLite数据库:每个’shard’一个活动用户。 这样备份数据库将像每天一次将每个用户的小数据库文件复制到远程位置一样简单。 扩展将像添加额外的硬盘来存储新文件一样简单 我正在开发一个Web应用程序,它在电子邮件服务和社交网络之间。我觉得它有潜力在未来成长真的,所以我关心可扩展性。

而不是使用一个集中的MysqL / InnoDB数据库,然后在那段时间进行分区,我决定为每个活动用户创建一个单独的sqlite数据库:每个’shard’一个活动用户。

这样备份数据库将像每天一次将每个用户的小数据库文件复制到远程位置一样简单。

扩展将像添加额外的硬盘来存储新文件一样简单。

当应用程序超越单个服务器时,我可以使用glusterFS在文件系统级别链接服务器,并且运行应用程序不变,或者建立一个简单的sqlite代理系统,允许每个服务器 *** 纵相邻服务器中的sqlite文件。

并发性问题很少,因为每个http请求每次只能触及一个或两个数据库文件,数千个sqlite只阻塞读取。

我敢打赌,这种方法将允许我的应用程序优雅地缩放,并支持许多酷和独特的功能。我下注错了吗?我缺少什么吗?

更新我决定使用一个不太极端的解决方案,这是工作正常到目前为止。我使用固定数量的分片 – 256个sqlite数据库,更准确。每个用户通过简单的散列函数被分配并绑定到随机碎片。

我的应用程序的大多数功能需要访问每个请求只有一个或两个分片,但有一个特别需要执行一个简单的查询10到100不同的碎片256,根据用户。测试指示如果所有数据被高速缓存在RAM中,则它将花费大约0.02秒或更少。我想我可以住在那里!

UPDATE 2.0我将应用程序移植到MysqL / InnoDB,并能够获得与常规请求相同的性能,但对于那个需要分片行走的请求,innodb的速度是4-5倍。因为这个原因,和其他原因,我丢弃这个架构,但我希望有人在某处找到一个使用它…谢谢。

这将失败的地方是,如果你必须做所谓的“碎片走”,这是找出所有的数据跨一群不同的用户。这种特定类型的“查询”必须以编程方式完成,依次询问每个sqlite数据库 – 这很可能是您网站中最慢的方面。这是在任何系统中的数据被“分片”到单独的数据库中的常见问题。

如果所有的数据都是自包含的,那么这应该很好地扩展 – 使这个有效的设计的关键是知道如何可能使用数据,如果一个人的数据将交互与来自另一个(在您的上下文中)的数据。

你可能还需要注意文件系统资源 – sqlite是伟大的,真棒,快速等 – 但你使用一个“标准数据库”(即MysqL,Postgresql等)时,得到一些缓存和写作的好处,因为他们设计。在你提出的设计中,你会错过一些。

总结

以上是内存溢出为你收集整理的极限分片:每个用户一个SQLite数据库全部内容,希望文章能够帮你解决极限分片:每个用户一个SQLite数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1162273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存