问题标签 [sharding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sorting - 如何对分布式数据进行排序和分页?
这是我要解决的问题:
我需要能够显示存储在多个数据库分片中的分页、排序数据表。
分页和排序是众所周知的问题,当数据来自单一来源时,我们大多数人都可以通过多种方式解决这些问题。但是,如果您要跨分片拆分数据或使用 DHT 或分布式文档数据库或任何您喜欢的 NoSQL 风格,事情就会变得更加复杂。
这是一个非常小的数据集的简单图片:
碎片 | 数据
1 | 1
| 1
| G
2 | 乙
2 | E
2 | H
3 | C
3 | F
3 | 一世
分页(页面大小 = 3):
页 | 数据
1 | 1
| 1
| C
2 | 2
| E
2 | F
3 | G
3 | H
3 | 一世
如果我们想向用户显示第 2 页,我们会返回:
D
E
F
如果有问题的表的大小大约是 1000 万行或 1 亿行,您不能只是将所有数据拉到 Web/应用程序服务器上对其进行排序并返回正确的页面。而且您显然不能让每个单独的分片对自己的数据片段进行排序和分页,因为分片彼此不知道。
更复杂的是,我需要呈现的数据不能过时,因此提前预先计算一组有用的排序并存储结果以供以后检索是不切实际的。
python - 如何自动将特定的 MySQL 表从一台机器移动到另一台机器?
我有一个 MySQL 数据库,其中包含"shard_0"
、"shard_1
" "shard_2"
、 等形式的表。
这些是虚拟分片。现在我想添加另一个数据库服务器并将偶数分片("shard_0"
, "shard_2"
, "shard_4"
, ...)移动到新机器上。
最好的方法是什么?有很多表,所以理想情况下我不必单独输入每个表名,而是自动执行某些操作。也许是这样的:
谢谢
sql - 分布式数据库计算——在 RDBMS 范式中真的有可能吗?
我是在 NoSQL 的背景下提出这个问题的——它在不昂贵的情况下实现了可扩展性和性能。
那么,如果我需要实现跨数据库的大规模并行分布式计算……今天(在 RDBMS 范式中)有哪些可用的各种方法来实现具有高可扩展性的分布式计算?
数据库集群和镜像是否对分布式计算有任何贡献?
postgresql - PostgreSQL 的扩展性与 MongoDB 相比如何?
我对 MongoDB 的可扩展性非常了解,尤其是它的自动分片,以及将服务器热添加到集群的能力。
但是,我没有找到太多关于 PostgreSQL 可扩展性的数据。我知道它有表空间,就像其他 RDBMS 一样。它可以自动增长这些(如分片)吗?还是像 SQL Server 中的手动过程?
有谁知道我在哪里可以获得更多关于这方面的数据?
php - Doctrine ORM:使用票务服务器生成主 ID 的最佳方法?
我正在创建一个集中的票务服务器来分发唯一的 32 位 INT id。我有一个可以在我的应用程序中调用的函数,它接受实体/表的参数,例如 getPrimaryKey('user')。我通过这篇博文从 Flickr 得到了这个想法:
http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/
我们最终将在多个 MySQL 数据库中分片我们的数据,我希望启动并运行此代码作为概念证明。
我的问题是在 Doctrine 中使用此功能的最佳方法是什么?显然,使用上面的票据服务器,我需要指定我的 Doctrine 模型都不包含自动递增的主键。
是否有一个我可以扩展的 Doctrine_Model 方法,该方法将在将新记录插入数据库之前使用我的 getPrimaryKey 方法检索主键?如果不是,我应该从我的应用程序中的另一个地方处理这个问题吗?
理想情况下,我希望在使用 Doctrine 关系时使用上述方法生成 id,例如:
此外,这种情况的另一面是从特定分片中选择数据。我目前的想法是像这样维护每个分片上包含的键范围的主列表(忽略每个分片的少量行):
分片A user_id 1-1000
分片 B user_id 1001-2000 分片
C user_id 2001-3000
然后我可以调用 getShard($table_name, $primary_key) 之类的方法来获取分片,并可能将我的 Doctrine 连接切换到该特定分片。特定用户/实体的相关数据很可能驻留在同一个分片上,因此我不太担心跨多个分片的关系。不过,这可能是一种可能性,因此也非常感谢有关此问题的任何指导。
database - Hibernate 与不同的数据库对话
我需要我的应用程序与两个不同的数据库通信,它们本身是复制的(使用 Postgres 流复制)。原因是我希望对一个数据库进行所有读取并针对另一个数据库进行写入。
我在我的应用程序中使用休眠。是否有开箱即用的方法来实现这一目标?
-谢谢
编辑:是的,请评论我想要实现的目标是否有意义。
google-cloud-datastore - GAE -- 对分片属性的查询
我了解 Google App Engine 中的分片值理论,如下所述:
http://code.google.com/appengine/articles/sharding_counters.html
但是当我想对已分片的值运行查询时会发生什么?我不能简单地查询该值,因为它已在 N 个不同的计数器中随机拆分。解决方案是否只是偶尔汇总这些值以更新我的主要实体?我很想知道其他人对这个问题提出了什么解决方案。
编辑:我刚刚发现了任务队列 API,它看起来可能是在后台更新主要值的解决方案。有人尝试将它与分片并行使用吗?
mongodb - 干净地关闭分片的 MongoDB 集群
我目前有一个 mongoDB 设置,其中有一个 mongos 服务器、一个配置服务器和 2 个分片,每个分片有 3 个 mongod(主从)服务器。我想确保当我关闭它们时,它们会干净地关闭,以免丢失任何排队的数据或服务器正在确定要写入的分片等。
当前关闭 MongoDB 服务器集群的最佳实践是什么?
最好按照哪个顺序关闭、发出 fsync、写锁等。
我想编写一个脚本来自动执行此操作,以方便备份、新代码推送以及其他任何需要数据库处于一致状态的操作。
mongodb - 为什么 ObjectId 使 MongoDB 中的分片更容易?
我一直在阅读,使用 ObjectId 作为唯一键可以使分片更容易,但我还没有看到关于为什么会这样的相对详细的解释。有人可以对此有所了解吗?
我问的原因是我想使用一个英文字符串(显然是唯一的)作为唯一键,但想确保它以后不会束缚我的手。
database - NHibernate 还是 EF,分片还是手动分片?
我想知道我是否做出了正确的决定。我正在开发一个应用程序,它允许用户混合来自本地数据库(可能是 SQL CE 或 SQLite)和来自远程共享数据库(很可能是 MySQL)的数据库条目。理想情况下,它必须灵活并与多种数据库服务器类型兼容(根据初始配置静态地,而不是动态地混合多种类型),但这不是一个阻碍。
代码是 C#、.NET 4。
自然,我在考虑 NHibernate,因为它在 3.0 版中具有 LINQ,代码可读性和效率的一个优势,并且模型优先的方法比实体框架更自然。它还有混合数据库部分的碎片,应该更容易处理。另一个选项是 EF 4,否则我会更喜欢它,因为它在 .NET 上下文和 Visual Studio 中得到完全支持,并且在那里有一个充满希望的未来。
Shards足够成熟了吗?它已经停留在 3 beta 很长一段时间了,看起来像是一个死项目,人们是否已经部署了基于此扩展的专业应用程序?它有未来吗?或者还有其他选择吗?
NHibernate 3 在 Mono 上运行吗?我认为是这样,但实际确认会很棒。如果必须开发 Web 服务器作为替代接口,这将是 EF 的另一个优势。
提前感谢您提供任何信息或反馈!
更新 1
显然 .NET 4 是一个问题,为了使用 NHibernate,.NET 3.5 更明智。此外,SQLite 和 SQL CE 或框架的其他部分(如 WPF)显然存在问题。
NHibernate 是否允许跨不同数据库类型(例如 MySQL 和 SQLite)进行分片?
所以我开始相信 EF 4 对客户端来说更安全,而 NHibernate 在可能的 ASP.NET 接口方面更安全。