编程的圣杯是一次解决问题,并永远重复使用该解决方案.然而,尽管我付出了最大的努力,但我发现我经常重新处理熟悉的问题.除了GoF设计模式之外,我曾多次设计过日历,内容管理和人/组织地址簿,仅举几例.
我想知道是否有任何好的资源(书籍,网站,等等)我可以仔细阅读常见的高级商业设计.我确实意识到我的项目和我可能发现的任何模式之间的要求会有所不同,但我确实希望事情的核心保持不变,那将会有很多来之不易的经验.此外,尽管如此,我只是喜欢阅读有关设计出现的决策背后的过程和理由.当商店,初创公司和编码员对他们的设计透明时,我喜欢它.(例如37Signals,Garret Dimon)
这篇文章涉及这个主题并将这些高级设计模式称为"功能设计模式",但我不确定这是我所描述的常用术语.对"功能设计模式"的搜索并未发生太多变化.我还搜索了"领域特定设计模式"和"数据模型设计模式",后者提供了一个有趣的结果,所以这可能更多的是目标.你知道我想用什么术语描述什么?有什么好资源吗?是否有其他商店/程序员透明地展示他们的新设计?
我正在尝试学习如何在我的应用程序中映射实体/演员/对象/事物以便在Cassandra中存储.Redis有一个很棒的教程,用于建模Twitter数据和称为Retwis的典型访问模式[1].我找到了几个Cassandra的例子.
你是如何开始为Cassandra的数据模型获得直觉的?
我有一个同义词列表,需要在SQL中为它创建一个数据库.
我正在考虑使用关系数据库设计,但不知道它是否是最好的.使用此数据库将有相当数量的流量.
我在想Table1会是这样的
Id
Table2
Id
InterlinkID (Table1 Id)
Word
Run Code Online (Sandbox Code Playgroud)
这会是最好的方式吗?可能有1到20个以上的链接词.我从这个设置中看到的另一个问题是如果我有一个单词作为多个单词的同义词.
不太好用它如何使用的例子,但是你明白了:
Table 1
Id 1
Id 2
Table 2
Id 1
InterlinkID 1
Word One
Id 2
InterlinkID 1
Word 1
Id 3
InterlinkID 1
Word First
Id 4
InterlinkID 2
Word Two
Id 5
InterlinkID 2
Word 2
Id 6
InterlinkID 2
Word Second
在阅读了MySQL Workbench的文档后,我得到的印象是可以更改服务器中的数据库(例如添加新列),然后将DDL更改合并到您的EER图中.至少,它在Database菜单中有一个Synchronize Model选项.我发现这是一个很好的功能,因为我可以使用图形建模工具而不会成为它的囚犯.
在实践中,当我运行这样的工具时,我提供了以下选项:
Model Update Source
================ ====== ======
my_database_name --> ! N/A
my_table_name --> ! N/A
N/A --> ! my_database_name
N/A --> ! my_table_name
Run Code Online (Sandbox Code Playgroud)
我不能真正理解它,但是我基本上得到它:
DROP SCHEMA my_database_name
CREATE SCHEMA my_database_name
CREATE TABLE my_table_name
Run Code Online (Sandbox Code Playgroud)
这是模型的转储,它会覆盖my_table_name中的所有远程更改.
我误解了这个功能吗?
在尝试设计数据库时,我很难理解Max和Min基数之间的区别.
您如何在MongoDB中为电子邮件应用程序(如gmail)建模?你会模特Conversation吗?Inbox/ OutBox?还是mail?
谢谢
提示这个问题的问题与创建类似于构建IR系统时使用的巨大倒置指数有关.IR社区的一般口号是关系数据库不适合构建IR系统.无论如何,在查看posgres时,行元组开销是23字节+填充(请参阅" Postgres常见问题解答 "中的"从典型文本文件存储数据需要多少数据库磁盘空间?" ).这对我的工作来说太大了(不缩放).
顺便提一下,我的数据集是17个文本,需要4-5个表,具体取决于问题的切片方式.我记得在sqlite中尝试了一个模式,db文件打破了100个演出
我很想知道Sql Server/MySql/Sqlite/Berkeley db(所有访问方法)/ Berkley Db的sqlite3接口/ Kyoto,Tokyo db和Firebird的每行开销是多少.任何一个人都无法回答我猜的问题,除非有人像我一样好奇地调查此事.
编辑
假设我有一个持有时间戳的数据库.对于每个时间戳属性,我可以添加一个准确度属性,说明置信区间,因此存储的信息可能是,例如,"2012年7月1日12:13,+/ - 3个月".
但总的来说,录制准确性/置信度并非如此简单.家谱数据库可能需要记录一个人可能是另一个人的父亲的事实.
那么存储具有不同准确度/置信度的信息的一般原则或最佳实践是什么?
我可以找到许多支持使用Canonical模型的信息,但我想知道它的一些缺点或缺点,并且可能获得一些关于创建这种模型的各种方法的知识.
我一直在使用couchdb中的图形结构(具有命名关系的属性图)建模,并想知道我会发现什么是性能的潜在瓶颈.
我使用以下原则:
似乎所有这些原则都与CouchDB哲学相矛盾,
例如,有了这个原则,标记一个人就成了三个文件:
{ _id: '10', type: 'person', 'name': 'John Doe' }
{ _id: '20', type: 'tag', 'name': 'Important' }
{ _id: '30', type: 'link', from: 10, to: 20, name: 'tag' }
Run Code Online (Sandbox Code Playgroud)
我还在一个_design名为的文档中创建了以下视图links:
{
outgoing: {
map: function(doc) {
if (doc.type == 'link') {
emit([doc.from, doc.name], {_id: doc.to});
}
}
},
incoming: {
map: function(doc) {
if (doc.type == 'link') {
emit([doc.to, doc.name], { _id: doc.from });
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过这些网址获取文档传入或传出的所有链接: …
data-modeling ×10
database ×4
nosql ×2
sql ×2
cardinality ×1
cassandra ×1
couchdb ×1
graph ×1
mongodb ×1
mysql ×1