代码之家  ›  专栏  ›  技术社区  ›  mare

将webshop存储迁移到NoSQL解决方案

  •  3
  • mare  · 技术社区  · 14 年前

    如果您有一个基于SQL Server关系数据库的webshop解决方案,那么迁移到NoSQL存储的原因是什么(如果有的话)?将严重依赖关系的数据存储迁移到NoSQL有意义吗?如果从头开始,你会选择NoSQL解决方案而不是关系型解决方案来进行一个webshop项目吗?一段时间后,它会再次以一堆表结束,比如文章、分类、税率、价格表等,以及它们之间的大量关系?

    在.NET(4.0)中对MongoDB的支持和MongoDB对.NET 4.0的支持是什么样的?MongoDB是否可以使用类似EF wizard、L2SQL wizard等的丰富代码生成工具?

    因为正如我到目前为止所读到的,NoSQL主要适用于文档存储,更简单的对象模型。

    您对这个问题的回答将帮助我做出正确的基础设施设计决策。

    更新:如果我是围绕ASP.NETMVC开发解决方案,并且严重依赖模型类,那么选择DB4o来简单地序列化和反序列化数据存储中的对象是最简单的方法吗?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Community CDub    7 年前

    好吧,这是一个开放性的问题。

    对于现有的关系技术,通常有很多经验和知识。当你的应用程序运行良好,它可能不值得的努力。但是,当您对当前解决方案有无法解决的问题时,这是一种选择。

    将严重依赖关系的数据存储迁移到NoSQL有意义吗?

    您必须考虑到这三种技术(文档数据库、关系数据库、对象数据库)彼此有很大的不同。

    • 在对象数据库中,每个对象单独存储,“关系”以指针的形式存储。因此,当一个对象a有一个对对象B的引用时,对象数据库存储这个引用。因此,要检索“关系”,不需要连接操作。因此“关系”是廉价的。总之,对象数据库非常擅长处理关系。
    • 在MongoDB这样的文档数据库中,完整的对象图存储为文档。文档数据库使用文档级别的数据库。所以这里没有真正的“关系”。通常只需存储/加载文档。因此,当您可以对场景进行建模,使大多数操作只在单个文档上工作时,这是非常高效和简单的。

    这是个好主意 blog-post

    最后,您的模型应该适合您的数据库。例如,不要尝试对关系数据库使用模型,并将其以1:1的比例存储在文档数据库中。另请参见 Ayende's blog about modeling for a object-database .

    在.NET(4.0)中对MongoDB的支持和MongoDB对.NET 4.0的支持是什么样的?

    Gates VP has already answered this for MongoDB . db4o的.net4.0版本正在开发中。同时,3.5版本在4.0框架上也运行良好。

    Gates VP answer

    因为正如我到目前为止所读到的,NoSQL主要适用于文档存储,更简单的对象模型。

    当然,当您存储了类似文档的数据(例如博客软件)时,文档数据库工作得非常好。而图形和对象数据库擅长处理极端复杂的数据结构。

        2
  •  3
  •   Gates VP    14 年前

    迁移现有的关系数据存储有意义吗?

    除非你有很大的性能问题。这里的交易,“网络规模”的性能问题通常是解决了非规范化。MongoDB本身就是一个非规范化的数据库。

    如果从零开始,你会选择NoSQL解决方案而不是关系解决方案来进行webshop项目。。。

    对。MongoDB非常适合典型的基于web的项目。但是,如果您有很多SQL经验,您可能会发现报告有点尴尬。

    .NET 4.0支持吗?MongoDB是否可以使用类似EF wizard、L2SQL wizard等的丰富代码生成工具?

    Mongo有一个可用于.NET的驱动程序。

    Mongo没有L2SQL或EF向导,但确实不应该有。老实说,您可能最怀念的是分析数据库的EnterpriseManager。

    MongoDB其实并不需要EF向导。EF是MS针对DBs和对象之间的“阻抗失配”的解决方案。MongoDB没有“阻抗失配”,只要把对象塞进DB就可以了。L2SQL也是如此。人们已经建立了一些Linq支持(只是一个快速的google),但是像joins这样的东西不起作用b/c Mongo不做joins。

    别误会我的意思,这里有一个不同的查询范例的空间,但在这方面,你在新的领域(您将为所有键值和面向文档的存储提供支持)。