我对阅读高级文档的数据库分片有一个概念性的理解,但我还没有读过很多代码或者自己做过这样的黑客攻击。
在this article about using Redis as a primary datastore中,作者强调
您需要围绕分片设计数据
我对设计标准感到困惑:
作者还提到了
最困难的部分是明确定义如何将数据细分为[分片]。这是一个非常特定于应用程序的问题
答案 0 :(得分:1)
Redis中的Sharding本质上比关系数据库中的更容易,因为数据之间没有关系。您可以在应用程序级别定义根据您自己的算法在Redis实例之间分配数据的方式。您可以说它与数据设计有关。例如,您可以说实体是根据其性质(数据库中的用户,另一个中的产品)或根据其ID(在数据库中名称以A到L开头的用户,在另一个中从M到Z)进行分片。
与Redis(以及一般的NoSQL数据库)一样,您必须根据请求的方式设计数据模型。
有一篇关于redis website数据分区的详细文章。它比我能写的任何答案都要完整得多:)
为了它的价值,我使用Redis作为主数据存储区实现了一个完整的Web应用程序,首先作为实验。这是一个社交网络,有一个多标准的搜索引擎。我想我必须在某个时候切换到更传统的解决方案(比如添加关系数据库)。我很惊讶我没有这样做。我必须处理的每个用例(包括搜索引擎)都很容易使用Redis实现。 Redis让我获得了令人印象深刻的表现。但我不得不考虑很多关于数据建模,数据丢失是否可接受(并创建健壮的算法,能够透明地重新启动崩溃中断的进程),如何限制内存消耗......以及设计我的数据根据这个。
最后但并非最不重要的是,Redis Cluster正在进行中,可能会为您提供分片解决方案。但是它还没有生产就绪,与单个redis实例(每个实例只有一个数据库)相比,它将受到限制。