我有一个Lexicon模型,我希望用户能够为每个词典创建动态功能。
我有一个复杂的搜索界面,让用户搜索属于Lexicon模型的每个特征(包括动态的)。
如果不是用于搜索,我可以使用序列化文本字段来保存所有动态信息。
如果我想让用户搜索所有字段,我创建了一个DynamicField模型来保存所有动态创建的功能。
但是想象一下我有1000,000,000个词典,如果为每个词典创建一个动态功能,这将导致在DynamicField模型中创建1,000,000,000行。
因此,在创建大量动态特性的同时,sql搜索功能将变得非常低效。
这种情况有更好的解决方案吗?
我应该采取哪种方式?
为动态字段搜索更好的数据库设计
尝试使用当前的数据库设计调整mysql(添加缓存字段,添加索引...)
答案 0 :(得分:2)
另一个想法可能是使用MongoDB和MongoMapper,Thinking Sphinx或Solr。以下是关于如何使用Mongo的Railscast:http://railscasts.com/episodes/194-mongodb-and-mongomapper
答案 1 :(得分:1)
我认为最好的方法是使用名称/值配对而不是动态字段。让我解释一下使用EAV design pattern
所以不要有这样的东西:
Table: MedicalRecords
<table>
<tr>
<th>Temperature in degrees Fahrenheit</th>
<th>Presence of Cough</th>
<th>Type of Cough</th>
<th>Heart Rate in beats per minute</th>
<th>Column X</th>
<th>Column X + 1</th>
<th>... Column N</th>
</tr>
<tr>
<td>102</td>
<td>True</td>
<td>With phlegm, yellowish, streaks of blood</td>
<td>98</td>
<td>????</td>
<td>????</td>
<td>????</td>
</tr>
</table>
你可以这样设计你的表:
Table: MedicalRecords
<table>
<tr>
<th>Name</th>
<th>Value</th>
</tr>
<tr>
<td>Temperature in degrees Fahrenheit</td>
<td>102</td>
</tr>
<tr>
<td>Presence of Cough</td>
<td>True</td>
</tr>
<tr>
<td>Type of Cough</td>
<td>With phlegm, yellowish, streaks of blood</td>
</tr>
<tr>
<td>Heart Rate in beats per minute</td>
<td>98</td>
</tr>
<tr>
<td>Column X</td>
<td>????</td>
</tr>
<tr>
<td>Column X + 1</td>
<td>????</td>
</tr>
<tr>
<td>... Column N</td>
<td>????</td>
</tr>
</table>
(试图让表标签工作,但无法尝试将我的代码复制到html文件中以获得想法。)