【发布时间】:2014-03-10 13:19:16
【问题描述】:
我希望使用空间来定位给定邮政编码 x 英里范围内的车辆。我想使用两个表,vehicle_listing 和 zip_code_detail,其中 vehicle_listing 与 zip_code_detail 具有多对一关系。我的地址表由包含 long/lat 等的整个邮政编码数据库组成。
- 空间是否可以通过连接正常工作,或者我应该包括 long/lat 在vehicle_listing 中?
- 如果我对我的 ManyToOne 关系使用 @IndexEmbedded 并使用 @Indexed zip_code_detail,是否会为整个 zip_code_detail 表建立索引,还是只连接 zip_code_detail 记录?
我正在寻找具有最佳性能的数据库设计,同时最大限度地减少内存消耗并理想地减少数据重复。
使用 MySql 作为数据库的实体设计。
@Entity
public class ZipDetail implements Serializable {
@Id
@Column(length = 5)
private String zip;
private String city;
@ManyToOne
@JoinColumn(name = "state_id")
private State state;
@ManyToOne
@JoinColumn(name = "county_id")
private County county;
@NonVisual
private String areaCodes;
@NonVisual
private Double latitude;
@NonVisual
private Double longitude;
private String country;
VehicleListing.class
@Indexed
@Spatial(spatialMode = SpatialMode.GRID)
public class VehicleListing extends BaseEntity {
@NonVisual
@Latitude
private Double latitude;
@NonVisual
@Longitude
private Double longitude;
@IndexedEmbedded
@ManyToOne
@JoinColumn(name = "year_id", nullable = false)
private VehicleYear vehicleYear;
@IndexedEmbedded
@ManyToOne
@JoinColumn(name = "make_id", nullable = false)
private VehicleMake vehicleMake;
@ManyToOne
@JoinColumn(name = "zip_detail_id", nullable = false)
private ZipDetail zipDetail;
【问题讨论】:
-
你用的是什么数据库?
-
您能否提供带注释的类以使其更具体。
-
@Hardy,我提供了一个实体示例。我最终只是将 long/lat 移动到我的车辆列表表中,因为我发现 massindexer 正在索引所有 42k zip 记录,而几乎没有那么多车辆。我原本想加入 zipdetail 以防止数据重复。
-
@CodeJunkie 谢谢。我曾希望你会说 SQL,并为你预先写了一个回复。我不是特别精通 MySQL,但我在 SQL 中做了相当多的空间工作。你想让我把它贴出来看看对你有没有帮助?
-
我肯定对你的观点感兴趣。
标签: hibernate lucene spatial hibernate-search