我们即将解决客户对基于 Web 的应用程序的需求,该应用程序包含大量 产品及其数据 - 包括价格、重量、体积等。
除价格外的所有数据都是将存储一次的数据,之后可能不会更改。另一方面,价格将至少每天更新一次以适应不断变化的货币汇率。因此,我们考虑过使用 noSQL 数据库,但我还没有经验来决定它是一个好主意还是只是一个奇特的现代解决方案?
是吗?
非常感谢!
最佳答案
As Michael explained ,关系数据库就足够了,具体取决于您的具体要求。但是,NoSQL 数据库可能是更好的解决方案,具体取决于您的两个方面的要求:数据的数量和格式。
如果数据量可以很容易地由单个关系数据库服务器处理,那么一定要使用那个关系数据库。但是,如果您要处理单个服务器无法有效处理的大量数据,NoSQL 解决方案可能是更好的选择。 NoSQL 数据库更适合跨服务器分布,因为它们不必处理关系完整性和原子事务等问题。
如果您的所有产品都大致包含相同的属性,并且所有这些属性都可以轻松地存储在一个表中,那么请使用关系数据库。但是,如果每个产品类型的数据模型可能存在很大差异和/或产品数据被规范化为多个表并且不容易被反规范化,那么无模式 NoSQL 解决方案(例如文档数据库)可能成为更好的选择。这样您就不必处理大量数据的连接操作。
简而言之,如果您要处理大量数据,或者处理(部分)无模式的数据,NoSQL 绝对是一个可行的解决方案。
请记住,关系数据库也可以通过 sharding 针对大量数据进行优化。 .例如,您可以根据 SKU 将产品拆分到单独的表中。那么数据库只需要处理小表,而不是单个大表。这些表可以存储在单独的服务器上以分散负载。
另一种选择是使用 CQRS architecture在关系数据库之上。所有数据修改查询都发送到单个主数据库。然后将这些修改发布到只读数据库或缓存,其中包含数据的非规范化表示。数据检索查询在只读数据库上执行以获得更好的性能。尽管这在纸面上是一个不错的架构,但它确实对应用程序的整体架构产生了相当大的影响。所以我不会推荐 CQRS,除非你以前用过它。
您的问题没有简单的答案,因为这完全取决于具体要求。我的建议是在项目的设计阶段牢记关系和 NoSQL 解决方案。如果您随后意识到关系数据库就足够了,那么就使用它。如果您意识到使用 NoSQL 数据库同样容易,请尝试一下。
不是一个是/否的答案,但希望有一些食物:)
关于mysql - 用于存储产品信息的 noSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485226/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于